我在数据库中使用三个表,并且我需要的查询应该组合所有三个表。 这些表格看起来像:
表A:
id | name | status
---------------------------------
5 | john | 1
7 | mike | 1
8 | jane | 0
表B:
send-id | receive-id | notification
-------------------------------------------
12 | 5 | 1
5 | 23 | 1
8 | 14 | 1
19 | 7 | 2
14 | 5 | 1
表C:
registered-id | status-reg
----------------------------------
5 | 7
7 | 7
8 | 7
9 | 3
我需要列出表 A 中状态为“1”、表 C 中状态为“7”的用户,并且这些用户未在表 B 列“receive-id”中列出,其值为“通知”栏中的“2”。
此示例中的结果将是:
id | name | status | notification
--------------------------------------------------
5 | john | 1 |
ID 号为 7 和 8 的用户将从列表中排除。 ID# 7 的用户,因为它位于表 B 中的 receive-id 字段,表通知中的值为 2;ID 为 8 的用户,因为它在表 A 中的状态为 0。
如何在一个查询中做到这一点?
感谢您的帮助。
最佳答案
Select ID, Name, Status, Notification
FROM TableA A
LEFT JOIN TableB B on B.receive-id = a.ID
and b.notification <> 2
INNER JOIN tableC C on A.ID = C.Registered-id
WHERE a.status=1
and c.status-reg=7
我认为你想要所有用户,即使他们在表 B 中没有记录,只要状态为 1 和 7。因此我认为需要左连接,并且必须对连接施加限制(除非你想在where子句中处理空值)
关于Mysql连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10269809/