【问题标题】:Show all the fields from JOIN table in the UNION?在 UNION 中显示 JOIN 表中的所有字段?
【发布时间】:2012-10-07 18:58:48
【问题描述】:

如何显示 tariff_data 表中已包含在 UNION with JOIN 中的某些字段?

例如:

SELECT  X.* FROM
    (
         SELECT phone_id, tariff_id, active  FROM table1 WHERE id = 5
      UNION
          SELECT dgt.phone_id, tns.tariff_id, dgt.active  FROM  table2 AS dgt 
                JOIN tariff_data AS tns ON tns.something = dgt.something
          WHERE id = 5
    ) as X

【问题讨论】:

  • 关税_id 不是关税数据中的一个字段吗?您希望包含不在 table1 中的字段吗?
  • 是的,它可以包含所有字段,即使table1中没有的字段也可以

标签: mysql database


【解决方案1】:
SELECT  X.* FROM
(
    SELECT phone_id, tariff_id, active, null as "somefield"  FROM table1 WHERE id = 5
      UNION
    SELECT dgt.phone_id, tns.tariff_id, dgt.active, tns.somefield FROM  table2 AS dgt 
            JOIN tariff_data AS tns ON tns.something = dgt.something
    WHERE id = 5
) as X

【讨论】:

  • 啊,我明白了,不过有点难看。
  • 是的 - 我修改了答案 - 如果有帮助,您可以将不存在的字段设置为任何内容。
【解决方案2】:

您需要在两个 Select 语句中包含来自关税数据的字段,将第一个设置为 null 或任何您喜欢的:

SELECT  X.* FROM
(
    SELECT phone_id, tariff_id, active, null as "somefield"  FROM table1 WHERE id = 5
      UNION
    SELECT dgt.phone_id, tns.tariff_id, dgt.active, tns.somefield FROM  table2 AS dgt 
            JOIN tariff_data AS tns ON tns.something = dgt.something
    WHERE id = 5
) as X

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    相关资源
    最近更新 更多