我有两个相关的sql server表... TableA和TableB。
***TableA - Columns***
TableA_ID INT
VALUE VARCHAR(100)
***TableB - Columns***
TableB_ID INT
TableA_ID INT
VALUE VARCHAR(100)
对于TableA中的每条记录,TableB中都有始终 2条记录。因此,TableA与TableB具有一对多的关系。
如何编写单个sql语句来连接这些表,并为TableA中的每一行返回一行,其中包括:
答案 0 :(得分:2)
对于2个相关记录,这很容易。加入表B两次:
SELECT
A.TableA_ID,
A.VALUE AS VALUE_A
B1.VALUE AS VALUE_B1
B2.VALUE AS VALUE_B2
FROM
TableA AS A
INNER JOIN TableB B1 ON B1.TableA_ID = A.TableA_ID
INNER JOIN TableB B2 ON B2.TableA_ID = A.TableA_ID
WHERE
B1.TableB_ID < B2.TableB_ID
如果表B中有一列确定什么是“第一个值”,什么是“第二个值”,这就更容易了(对于表B中的N列,它会像这样工作,只需添加更多连接) :
SELECT
A.TableA_ID,
A.VALUE AS VALUE_A
B1.VALUE AS VALUE_B1
B2.VALUE AS VALUE_B2
FROM
TableA AS A
INNER JOIN TableB B1 ON B1.TableA_ID = A.TableA_ID AND B1.Type = '1'
INNER JOIN TableB B2 ON B2.TableA_ID = A.TableA_ID AND B2.Type = '2'
TableB
上(TableA_ID, Type)
的综合索引有助于此加入。