【问题标题】:SQL Join across multiple tables and order by single columnSQL Join 跨多个表并按单列排序
【发布时间】:2015-06-09 02:11:45
【问题描述】:

我正在尝试连接多个表并根据它们共享的公共列对数据进行排序。这是一个例子:

表 A

    pk  itemId  text
    1   10      ordered
    1   5       make
    1   8       it
    1   4       not

表 B

    pk  itemId  text    variable
    1   6       sense   94
    1   1       this    99
    1   2       text    98

表 C

    pk  itemId  text    anotherVariable
    1   3       does    97
    1   7       unless  93
    1   9       is      91

我需要像这样的决赛桌:

结果表

    pk  itemId  text    variable
    1   1       this    99
    1   2       text    98
    1   3       does    97
    1   4       not     NULL
    1   5       make    NULL
    1   6       sense   94
    1   7       unless  93
    1   8       it      NULL
    1   9       is      91
    1   10      ordered NULL

我正在使用以下查询,但它不起作用...

    SELECT *
    FROM tableA as A
    INNER JOIN tableB as B ON A.pk = B.pk
    INNER JOIN tableC as C ON A.pk = C.pk
    ORDER BY A.itemId, B.itemId, C.itemId

编辑: 添加了另一个变量以进一步解释我的问题,跨表我并不总是在所有表上都有相同的列名。在其他表上,我可能希望在结果表中包含不同的列。

【问题讨论】:

  • 你为什么不简单地做你说你想做的事情,并按共享列排序你的结果?
  • @DanBracuk 加入后没有“共享 [项目] 列”..

标签: mysql sql sql-server inner-join


【解决方案1】:

请改用UNION ALL

SELECT pk, itemId, [text], variable = NULL FROM TableA UNION ALL
SELECT pk, itemId, [text], variable FROM TableB UNION ALL
SELECT pk, itemId, [text], anotherVariable FROM TableC
ORDER BY pk, itemId

只要您在所有SELECT 语句中具有相同数量的列,并且所有列都具有相同的数据类型,UNION ALL 应该可以工作。

这是UNION 的文档。

【讨论】:

  • @MikeK,哈哈哈。经典的复制粘贴错误。谢谢!
  • @wewestthemenace 太棒了!这正是我所需要的,谢谢!
  • 没问题,很高兴我能帮上忙。
猜你喜欢
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 2015-09-21
  • 2012-04-06
  • 1970-01-01
相关资源
最近更新 更多