0

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

4

1 回答 1

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;
于 2012-06-20T20:08:19.557 回答