加入了兩次參考假設我有兩個表:數查詢由不同的外鍵
Users
id: integer
name: string
Messages
id: integer
sender_id: integer
receiver_id: integer
body: string
我需要發送和接收信息的統計爲所有用戶。
發送郵件時我的查詢按預期工作:
SELECT users.id, COUNT(*) total_sent
FROM users
LEFT OUTER JOIN messages sent_messages ON sent_messages.sender_id = users.id
GROUP BY users.id;
+----+------------+
| id | total_sent |
+----+------------+
| 1 | 3 |
| 2 | 2 |
| 3 | 1 |
+----+------------+
但是我需要擴大查詢,並在同一時間獲得接收的消息的數量。我的嘗試是:
SELECT users.id, COUNT(sent_messages.id) total_sent, COUNT(received_messages.id) total_received
FROM users
LEFT OUTER JOIN messages sent_messages ON sent_messages.sender_id = users.id
LEFT OUTER JOIN messages received_messages ON received_messages.receiver_id = users.id
GROUP BY users.id;
不幸的是,它會產生錯誤的結果。
如果你喜歡,請考慮遵循以下簡單的兩步操作步驟:1.如果您尚未這樣做,請提供適當的DDL(和/或sqlfiddle),以便我們可以更容易地複製問題。 2.如果您尚未這樣做,請提供與步驟1中提供的信息相對應的所需結果集。 – Strawberry
嘗試COUNT(不同的sent_messages.id)和COUNT(不同的received_messages.id)。 – jarlh
@jarlh - 它做的工作:)謝謝! – Jacka