2013-04-09 35 views

回答

1

使用左連接和計數,無行比賽:

SELECT COUNT(*) 
FROM users u 
LEFT JOIN orders o 
ON o.assigned = u.id 
WHERE o.assigned IS NULL 

另一種方法是使用NOT IN檢查:

SELECT COUNT(*) 
FROM users 
WHERE id NOT IN (SELECT distinct(assigned) FROM orders) 

然而,在我的經驗中左連接性能更好(假定適當的索引)。

2

我會建議使用LEFT JOIN之間的兩個表,並在orders表不匹配的ID過濾行:

select count(u.id) 
from users u 
left join orders o 
    on o.assigned = u.id 
where o.assigned is null 

SQL Fiddle with Demo

0
SELECT COUNT(1) FROM users u 
WHERE NOT EXISTS (SELECT * FROM orders o WHERE o.assigned=u.id); 

你想要一個直計數(就像你提到的),還是你需要返回值?這會給你數量;如果你想要其他值,你應該採取上面列出的其他方法之一。

0

只要使用此查詢,假設ID是在用戶表中是唯一:

select count(*) From Users as u where u.id not in (select assigned from orders) 
0

內部聯接明確地尋找相匹配的行,這樣是不是去,如果你正在尋找非道路匹配的記錄

假設ORDERS.ASSIGNED與USER.ID外連接的時候有沒有像這樣

比賽選擇 u.id, Ø可以從兩個並顯示返回值。*匹配 從用戶ü 全外連接級O 上o.assigned = u.id;

,如果你只是想知道哪些USER.ID沒有一個訂單記錄,你也可以交叉或使用NOT IN()如

從用戶ü其中id不在(選擇o選擇u.id從orders.o分配);

相關問題