跨多个表的 SQL 连接并按单列排序

kev*_*r90 0 mysql sql sql-server inner-join

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

表A

    pk  itemId  text
    1   10      ordered
    1   5       make
    1   8       it
    1   4       not
Run Code Online (Sandbox Code Playgroud)

表B

    pk  itemId  text    variable
    1   6       sense   94
    1   1       this    99
    1   2       text    98
Run Code Online (Sandbox Code Playgroud)

表C

    pk  itemId  text    anotherVariable
    1   3       does    97
    1   7       unless  93
    1   9       is      91
Run Code Online (Sandbox Code Playgroud)

我需要决赛桌看起来像这样:

结果表

    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
Run Code Online (Sandbox Code Playgroud)

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

    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
Run Code Online (Sandbox Code Playgroud)

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

Fel*_*tan 5

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
Run Code Online (Sandbox Code Playgroud)

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

这是 的文档UNION