SQL 连接多个表并按单列排序
SQL Join across multiple tables and order by single column
我正在尝试连接多个 table 并根据它们共享的公共列对数据进行排序。这是一个例子:
Table一个
pk itemId text
1 10 ordered
1 5 make
1 8 it
1 4 not
Table B
pk itemId text variable
1 6 sense 94
1 1 this 99
1 2 text 98
Table C
pk itemId text anotherVariable
1 3 does 97
1 7 unless 93
1 9 is 91
我需要最后的 table 看起来像这样:
结果Table
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
编辑:
添加了另一个变量来进一步解释我的问题,在 tables 中,我并不总是在所有 tables 上具有相同的列名。在其他 table 上,我可能希望在结果中包含不同的列 table。
改用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
的文档。
我正在尝试连接多个 table 并根据它们共享的公共列对数据进行排序。这是一个例子:
Table一个
pk itemId text
1 10 ordered
1 5 make
1 8 it
1 4 not
Table B
pk itemId text variable
1 6 sense 94
1 1 this 99
1 2 text 98
Table C
pk itemId text anotherVariable
1 3 does 97
1 7 unless 93
1 9 is 91
我需要最后的 table 看起来像这样:
结果Table
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
编辑: 添加了另一个变量来进一步解释我的问题,在 tables 中,我并不总是在所有 tables 上具有相同的列名。在其他 table 上,我可能希望在结果中包含不同的列 table。
改用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
的文档。