MySQL联盟 - 如何在所有行中显示表1内容?

时间:2012-06-20 19:43:51

标签: mysql union

在下面的mysql查询中,我想知道是否可以从表aitisi中获取行来代替表成员中的空白值。事实是,我需要创建一个联合,但也要显示所有行中第一个表的数据。

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的行中获取日期和程序,其余的都是空白的。

1 个答案:

答案 0 :(得分: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;