2012-06-20 77 views
0

在下面的mysql查詢中,我想知道是否有可能從表aitisi的行中顯示來自表成員的空值。事情是,我需要創建一個聯合,但也顯示所有行中第一個表的數據。MySQL聯盟 - 如何顯示所有行中的表1內容?

select a1.id, a1.name, a1.surname, a1.program, a1.date 
from aitisi a1 
union select a.id, m.name, m.surname, null, null from members m 
join aitisi a on (a.id = m.symbid) 

我使用null作爲虛擬字段,所以我可以使用相同數量的列執行聯合。 但是這樣我只能從表aitisi的行中得到日期和程序,其餘的都是空白的。

+0

您檢查了遞歸加入? – Hituptony

+0

你有什麼將節目和日期信息連接到你的會員表嗎?外鍵? – SuperMykEl

+1

您能否爲每個表格提供幾個示例行以及預期的結果? – vyegorov

回答

0

試試這個(不是很有效):

SELECT u.id, u.name, u.surname, 
     coalesce(u.program, aa.program), 
     coalesce(u.date, aa.date) 
    FROM (SELECT a1.id, a1.name, a1.surname, 
       a1.program, a1.date 
      FROM aitisi a1 
     UNION 
     SELECT a2.id, m.name, m.surname, NULL, NULL 
      FROM members m 
      JOIN aitisi a2 ON a2.id = m.symbid) u 
    JOIN aitisi aa ON aa.id = u.id; 

尋找更多的在你的初始查詢,這將是錯誤的這個變體:

SELECT a1.id, a1.name, a1.surname, a1.program, a1.date 
    FROM aitisi a1 
UNION 
SELECT a2.id, m.name, m.surname, a2.program, a2.date 
    FROM members m 
    JOIN aitisi a2 ON a2.id = m.symbid;