2011-10-27 25 views
2

我有什麼,我敢肯定,這是一個相當補救的問題,但我不能爲我的生活得到這個簡單的連接工作。如何在多個表上執行簡單連接?

基本上,我有3個表:

  • 成員(名字,姓氏),
  • MEMBER_TO_GROUP(member_id,GROUP_ID)
  • PAYMENTS(member_id,日期,金額)。

我期待從特定組中的成員獲取所有付款。通過僅使用兩個表格,我可以找到特定組的所有付款,無需MEMBER信息,或者我可以查找所有沒有付款信息的MEMBER信息。但是,當我嘗試添加第三個表時,將返回錯誤的數據(例如,我得到的成員不在組中)。這是我正在使用的基本查詢:

SELECT 
    p.*, 
    m.first_name, 
    m.last_name 
FROM 
    members m, 
    payments p, 
    member_to_group mg 
WHERE 
    mg.group_id = 12 
    AND mg.member_id = p.member_id 
    AND m.member_id = p.member_id 

我不確定斷開連接的位置,但任何援助將不勝感激。

+1

養成使用ANSI連接語法(如在galador的答案)的習慣。閱讀起來更容易,並且經常突出顯示您的邏輯錯誤。 –

+2

@Nick,這是SQL89。顯式連接是SQL92 ... :-) – gbn

+0

隱式連接(如這裏使用的連接是SQL反模式)。這種不好的語法在1992年被替換爲更容易閱讀和維護的事物,並且更不可能發生意外交叉連接。 – HLGEM

回答

2

我認爲這應該得到你想要的東西:

SELECT p.*, 
     m.first_name, 
     m.last_name 
FROM payments p 
INNER JOIN members m 
    ON m.member_id = p.member_id 
INNER JOIN member_to_group mg 
    ON mg.member_id = m.member_id 
WHERE mg.group_id = 12 
相關問題