栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

sql避免笛卡尔积

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

sql避免笛卡尔积

因此,看起来您希望每个表中的所有记录都是相同的,然后只希望每个表中的记录都是不同的。这意味着您需要UNIOn 3组查询。

尝试这样的事情:

SELECt t1.state,    t1.lname,    t1.fname,    t1.network as t1Network,    t2.network as t2NetworkFROM table1 t1    INNER JOIN table2 t2       ON t1.fname=t2.fname       AND t1.lname=t2.lname       AND t1.state=t2.state      AND t1.network=t2.networkUNIOn SELECt t1.state,    t1.lname,    t1.fname,    t1.network as t1Network,    t2.network as t2NetworkFROM table1 t1    LEFT JOIN table2 t2       ON t1.fname=t2.fname       AND t1.lname=t2.lname       AND t1.state=t2.state      AND t1.network=t2.networkWHERe t2.network IS NULLUNIOn SELECt t2.state,    t2.lname,    t2.fname,    t1.network as t1Network,    t2.network as t2NetworkFROM table2 t2    LEFT JOIN table1 t1      ON t1.fname=t2.fname       AND t1.lname=t2.lname       AND t1.state=t2.state      AND t1.network=t2.networkWHERe t1.network IS NULL

这应该给您您想要的结果。

这是要确认的SQL Fiddle。

- 编辑

今天不考虑-您实际上不需要第一个查询。您可以从第二个查询中删除WHERe条件,其工作方式相同。疲劳的 :-)

这是更新后的查询-两者都应该正常工作,这更容易阅读:

SELECt t1.state,    t1.lname,    t1.fname,    t1.network as t1Network,    t2.network as t2NetworkFROM table1 t1    LEFT JOIN table2 t2       ON t1.fname=t2.fname       AND t1.lname=t2.lname       AND t1.state=t2.state      AND t1.network=t2.networkUNIOn SELECt t2.state,    t2.lname,    t2.fname,    t1.network as t1Network,    t2.network as t2NetworkFROM table2 t2    LEFT JOIN table1 t1      ON t1.fname=t2.fname       AND t1.lname=t2.lname       AND t1.state=t2.state      AND t1.network=t2.networkWHERe t1.network IS NULL

和更新的小提琴。

顺便说一句-它们都应该在MSAccess中都支持

UNIOn

祝你好运。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/670179.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号