左连接查询不起作用

时间:2015-01-30 09:49:50

标签: mysql sql join

我有2张桌子。

Table 1:
ID     Name      Age       PhoneNumber 
12     Joe       25        873827382
23     Bob       28        928398233
34     Jane      23        237828883


Table 2:
ID     Agent       QuantitySold    
12      A1            100
23      B1            300
12      C1            600
34      A2            400
34      B1            800
23      B2            900   

我想展示从未出售过数量不等于800的员工的所有细节。

SELECT a.ID, a.Name, a.Age, a.PhoneNumber
FROM table1 a LEFT JOIN table2 b
ON a.ID= b.ID AND b.quantity <> 800

我想要一个没有ID 34的结果集。但我似乎无法实现这一目标。有什么帮助吗?

4 个答案:

答案 0 :(得分:1)

您可以使用NOT EXISTS而不使用任何JOIN s:

SELECT a.ID
     , a.Name
     , a.Age
     , a.PhoneNumber
FROM table1 a
WHERE NOT EXISTS (SELECT * FROM table2 WHERE ID = a.ID AND QuantitySold = 800)

顺便说一下,列名是QuantitySold,而不是quantity

JSFiddle

答案 1 :(得分:1)

您需要将Left Join更改为Inner Join

Left Join会带来table1的所有行,即使他从未创建sales。我将使用Exists执行此操作。

SELECT a.ID,
       a.Name,
       a.Age,
       a.PhoneNumber
FROM   table1 a
WHERE  EXISTS (SELECT 1
               FROM   table2 b
               WHERE  a.ID = b.ID
                      AND b.quantity <> 800) 

答案 2 :(得分:0)

为什么使用左连接。请使用内连接。这样的事情: -

SELECT a.ID, a.Name, a.Age, a.PhoneNumber, SUM(b.quantity)
FROM table1 a JOIN table2 b
ON a.ID= b.ID 
GROUP BY b.Agent
HAVING SUM(b.quantity) <> 800

答案 3 :(得分:0)

这是最终奏效的。

SELECT a.ID
     , a.Name
     , a.Age
     , a.PhoneNumber
FROM table1 a
WHERE a.ID NOT IN (SELECT ID FROM table2 QuantitySold = 800);