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