2012-04-22 123 views
1

我在数据库中使用三个表,并且我需要的查询应该合并所有三个表。 这些表是这样的:Mysql加入查询

表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中列“接收-ID”与列“通知”的值“2”。

本示例中的结果将是:

id | name | status | notification 
-------------------------------------------------- 
    5 | john |  1  | 

用户ID号7和8将被从列表中排除。具有ID#7的用户,因为它位于表格B中的字段receive-id中,表格通知中值为2,用户ID为8,因为它在表A中具有状态0。

我该怎么办在一个查询中?

感谢您的任何帮助。

回答

1

让我们尝试(未经测试,可能含有错误):

SELECT a.id, a.name, a.status, b.notification 
FROM a 
JOIN c ON (a.id = c.registered-id) 
JOIN b ON (a.id = b.receive-id) 
WHERE a.status = 1 
AND c.status-reg = 7 
AND b.notification <> 2 

希望这可以让你在正确的轨道上。

2
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子句中的空值)