我想計數未在其他表中引用計數的用戶的不同用戶......現在,我沿着這個線的東西:MySQL的加入表,並在另一個表中沒有引用
SELECT COUNT(DISTINCT u.id) FROM users u INNER JOIN orders o ON o.assigned!=u.id;
但是,它返回一個無效值。有什麼建議麼?
謝謝!
我想計數未在其他表中引用計數的用戶的不同用戶......現在,我沿着這個線的東西:MySQL的加入表,並在另一個表中沒有引用
SELECT COUNT(DISTINCT u.id) FROM users u INNER JOIN orders o ON o.assigned!=u.id;
但是,它返回一個無效值。有什麼建議麼?
謝謝!
使用左連接和計數,無行比賽:
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)
然而,在我的經驗中左連接性能更好(假定適當的索引)。
我會建議使用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
SELECT COUNT(1) FROM users u
WHERE NOT EXISTS (SELECT * FROM orders o WHERE o.assigned=u.id);
你想要一個直計數(就像你提到的),還是你需要返回值?這會給你數量;如果你想要其他值,你應該採取上面列出的其他方法之一。
只要使用此查詢,假設ID是在用戶表中是唯一:
select count(*) From Users as u where u.id not in (select assigned from orders)
內部聯接明確地尋找相匹配的行,這樣是不是去,如果你正在尋找非道路匹配的記錄
假設ORDERS.ASSIGNED與USER.ID外連接的時候有沒有像這樣
比賽選擇 u.id, Ø可以從兩個並顯示返回值。*匹配 從用戶ü 全外連接級O 上o.assigned = u.id;
,如果你只是想知道哪些USER.ID沒有一個訂單記錄,你也可以交叉或使用NOT IN()如
從用戶ü其中id不在(選擇o選擇u.id從orders.o分配);