2013-08-26 92 views
0

我試圖從數據庫SQL加入,返回null

我有什麼

USERS

USER_ID(PK)

enter image description here

OWN_EVENTS

返回一些值

USER_ID(FK)

event_id的(PK) enter image description here

ATTENDEES

USER_ID(FK)

event_id的(FK)

enter image description here

我需要返回

我需要在ATTENDEES這事項標識等於某個值返回所有行,狀態不等於3,該事件從OWN_EVENTS表和電子郵件值從USERS表EVENT_NAME值

我有什麼受審 我一直在嘗試所有類型的組合,但不可能找出什麼我做錯了 http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

即使返回null:

$query ="SELECT A1.event_name,A1.start_date 
        FROM ATTENDEES A1 
        INNER JOIN OWN_EVENTS A2 ON A2.event_id = A1.event_id 
        WHERE A1.event_id = $event_id"; 

$query ="SELECT A1.event_name,A1.start_date ,A3.email 
       FROM ATTENDEES A1 
       INNER JOIN OWN_EVENTS A2 ON A2.event_id = A1.event_id 
       INNER JOIN USERS A3 ON A3.user_id = A1.user_id 
       WHERE A1.event_id = $event_id AND A1.status != 3"; 

我需要什麼樣的查詢電話做什麼呢?

EDIT ::::: 示例數據:

與會者

enter image description here

OwnEvents

enter image description here

用戶

enter image description here

+0

您是否有更多示例數據? 'ATTENDEES'表有一行,但其他沒有。因此,INNER JOIN將始終不返回任何行。 –

+0

@MichaelBerkowski在phpmyadmin中添加了一些示例數據屏幕截圖 –

回答

1

問題是加入用戶表。您正在從ATTENDEES加入。不過,我想你想要擁有者的電子郵件地址。

這會將連接切換到left outer join。這將返回ATTENDEES表中的所有匹配行,即使在其他表中沒有匹配時也是如此:

SELECT oe.event_name, a.start_date, u.email 
FROM ATTENDEES a left outer join 
    OWN_EVENTS oe 
    ON oe.event_id = a.event_id left outer join 
    USERS u 
    on a.user_id = u.user_id 
WHERE a.event_id = $event_id AND a.status <> 3 
+0

當我查詢event_id的事件ID'148'我得到了'#1054 - '字段列表'中的未知列'a.event_name'' –

+0

@MordFustang。 。 。這是固定的,但這是您的示例查詢中的問題。您從「ATTENDEES」表中取出事件名稱,而不是「OWN_EVENTS」,它來自哪裏。使用別名縮寫表確實有助於防止出現此類錯誤。 –

+0

是的,我已經把查詢改成'oe.event_name,oe.start_date,u.email',MySQL返回一個空的結果集。如果你真的很快看我的樣本數據,我已經添加了一些來自數據庫 –