我有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的结果集。但我似乎无法实现这一目标。有什么帮助吗?
答案 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
。
答案 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);