2012-05-09 82 views
-2

我有一個複雜的查詢,我無法得到正確的答案。
有3個表:非常複雜的SQL查詢

接觸PK爲INT,爲VARCHAR,...)
會議PK爲INT,接觸爲INT。 ..)
消息PK爲INT,會議爲INT,...)

session.contact指向contact.pk。並且message.sessionsession.pk
session.contact爲零時,則此行不存在任何聯繫。 contact.pk從不爲零。

現在我想要獲取特定消息的所有名稱。我的嘗試是這樣的:

SELECT message.pk,contact.name FROM消息,會議,請與message.session = session.pk AND session.contact = contact.pk

但我沒沒有得到正確的返回行數。它應該是2459,有2075.

+9

一)這不是很複雜。 b)你怎麼知道正確答案是什麼?這是一個考試問題嗎? –

+0

我認爲你需要外連接有時沒有條目的表(即在你的例子中'session.contact = contact.pk'不會找到匹配)。 – Marc

+1

你是否試圖獲得沒有聯繫的記錄?您目前的查詢不會得到這些。這可能是你的缺陷 –

回答

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 
+0

同意使用JOIN語法,使其更具可讀性。 – barnyr

+3

太糟糕了,它不會改變他的結果 –

+0

@Shredder真的,但讓他們走向未來的正確道路是個好主意,不是嗎? – Bridge