内部联接过滤出期望的结果

时间:2020-10-02 22:21:36

标签: sql sql-server

我只是想知道如何解决此问题:

例如,当我键入此简单查询时

SELECT CUSTOMERS.CUSTOMER_ID, CUSTOMERS.NAME
FROM CUSTOMERS
WHERE (CUSTOMERS.NAME LIKE 'O%' AND CUSTOMERS.NAME LIKE '%e%') OR CUSTOMERS.NAME LIKE '%t';

我得到以下输出:

127 Alphabet
128 Comcast
129 Target
196 DuPont
197 Avnet
44  Jabil Circuit
58  Health Net
69  Whole Foods Market
226 Office Depot
260 Occidental Petroleum
27  Assurant
158 Owens & Minor
174 Oracle
255 Waste Management
88  Walmart
113 Microsoft
117 Home Depot

但是,当我添加INNER JOIN ORDERS ON CUSTOMERS.CUSTOMER_ID = ORDERS.CUSTOMER_ID时,我得到的是输出。

44  Jabil Circuit
44  Jabil Circuit
44  Jabil Circuit
58  Health Net
69  Whole Foods Market
44  Jabil Circuit
44  Jabil Circuit

似乎只为在ORDERS表中具有ID的客户显示ID和名称。如何使它再次遍及每个客户,而不仅是ORDERS表中的客户?

1 个答案:

答案 0 :(得分:1)

您应该使用LEFT JOIN而不是INNER JOINLEFT JOIN尝试将第二个表的条目与第一个表中的一个进行匹配,同时还显示第二个表中不存在匹配条目的第一个表的结果。在这种情况下,第二个表的条目将仅为NULLINNER JOIN仅向您提供给出双方条目的数据。

其他可能性是RIGHT JOIN,它类似于LEFT JOIN,但是切换了第一张和第二张桌子的角色,而FULL OUTER JOIN则只需要给出一侧。

更多信息和一些好的示例可以在w3schools上找到。