【问题标题】:MySQL union - how do I show table 1 content in all rows?MySQL union - 如何在所有行中显示表 1 内容?
【发布时间】:2012-06-20 19:43:50
【问题描述】:

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

【问题讨论】:

  • 你签出递归连接了吗?
  • 您有什么将节目和日期信息与您的会员表相关联吗?外键?
  • 您能否为每个表提供几个示例行以及预期结果?

标签: mysql union


【解决方案1】:

试试这个(效率不是很高):

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;

【讨论】:

    猜你喜欢
    • 2019-11-22
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 2019-11-05
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多