我有一个复杂的查询,我无法得到正确的答案 有3个表:
联系( pk 为INT,名称为VARCHAR,...)
会话( pk 为INT,联系为INT,...)
消息( pk 为INT,会话为INT,...)
session.contact
指向contact.pk
。 message.session
到session.pk
当session.contact
为零时,此行没有联系人。 contact.pk
永远不会为零。
现在我想获取特定消息的所有名称。我的尝试是这样的:
SELECT message.pk,contact.name FROM message,session,contact WHERE message.session = session.pk AND session.contact = contact.pk
但是我没有得到正确的返回行数。它应该是2459,有2075年。
答案 0 :(得分:2)
首先,您如何知道这是正确的行数?
其次,您应该使用与下面类似的正确JOIN
语法:
SELECT message.pk, contact.name
FROM message m
LEFT JOIN session s
on m.session = s.pk
LEFT JOIN contact c
on s.contact = c.pk