【问题标题】:SQL Join Tables with no common field没有公共字段的 SQL 连接表
【发布时间】:2013-09-06 01:35:12
【问题描述】:

我希望将两个不相关的表连接到一个表中,这样我就可以按一个公共字段排序并限制组合结果集显示在页面上。

例子

Table 1
Field1 | Field2 | Field3 | date_posted
--------------------------------------
Blah   | Blah2  | Blah3  | 2013-02-01 


Table 2
Field4 | Field 5 | date_posted
------------------------------
Blah4  | Blah5   | 2013-01-01 


Result
Field1 | Field2 | Field3 | Field4 | Field5 | date_posted
--------------------------------------------------------
Blah   | Blah2  | Blah3  | NULL   | NULL   | 2013-02-01
NULL   | NULL   | NULL   | Blah4  | Blah5  | 2013-01-01

原因是我之前设置了一个数据库来在单独的页面上显示这些表,现在客户希望将它们组合到一个页面中。如果我单独运行查询,然后在 php 中组合数据,则会出现某些问题,例如分页以及即使它们不是最新的,也必须选择每个查询的固定数量。

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:

    无需加入:

    select field1, field2, field3, null as field4, null as field5, date_posted
    from table_1
    union all
    select null,   null,   null,   field4,         field5,         date_posted
    from table_2
    

    要按特定列排序,只需添加order by

    select field1, field2, field3, null as field4, null as field5, date_posted
    from table_1
    union all
    select null,   null,   null,   field4,         field5,         date_posted
    from table_2
    order by date_posted
    

    请注意,在 UNION 中,order by 始终适用于完整结果,而不是单个部分。因此,即使它是在第二次选择之后放置的,它也会对所有内容进行排序。

    使用LIMIT实现分页

    【讨论】:

    • @ArthurFrankel:应该使用哪个顺序?在结果应该按特定列排序的问题中,我看不到任何参考(尽管按日期列排序可能有意义)
    • 从他的问题“所以我可以按公共字段排序并限制组合结果集显示在页面上”我假设 date_posted 是公共字段,因为它在表格中很常见。跨度>
    • 用医生的话来说,“太棒了!”。我知道这与 union all 有关,但无法克服有关表没有相同数量字段的错误。谢谢!
    【解决方案2】:
    SELECT Field1, Field2, Field3, date_posted
    FROM Table1
    UNION
    SELECT Field4, Field5, date_posted
    FROM Table2
    ORDER BY date_posted LIMIT 20
    

    【讨论】:

    • 那行不通。 UNION 的两个部分有不同的列数。而且,hireSwish 希望有 6 列,而不是 3 或 4。
    • 是的,我的错……你需要像你一样的空值。
    【解决方案3】:

    试试这个:

    select field1, field2, field3, null field4, null field5, date_posted from table1
    union all
    select null field1, null field2, null field3, field4, field5, date_posted from table2
    

    SQL 小提琴:http://sqlfiddle.com/#!2/69a46/1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 2015-10-06
      • 2021-09-20
      • 2018-10-20
      • 1970-01-01
      • 2015-11-11
      相关资源
      最近更新 更多