我有三张桌子
TABLE A
A_ID (PK)
B_ID
X_ID
A_NAME
TABLE B
B_ID (PK)
A_ID
B_NAME
TABLE C
C_ID (PK)
B_ID
C_NAME
X_ID将绑定到绑定变量,根据该变量将查询主键。
我必须从三个表中查询所有主键,而不在查询结果中重复这些主键 我使用的查询是
SELECT TABLEA.A_ID,TABLEB.B_ID,TABLEC.C_ID
FROM TABLEA INNER JOIN TABLE B
ON TABLEA.A_ID= TABLEB.A_ID JOIN TABLE C
ON TABLEB.B_ID= TABLEC.B_ID
WHERE TABLEA.X_ID = :bindVariable
ORDER BY TABLEA.A_NAME
更新
列和值
A_ID B_ID C_ID X_ID
101 201 301 1
101 201 302 1
101 202 303 2
102 202 304 2
但我想基于X_ID(值1
)
PK_ID
101
201
301
302
应该显示所有唯一ID,而不重复。
答案 0 :(得分:3)
UNION
运算符将消除重复项,因此您只需要:
SELECT A_ID
FROM [Table A]
UNION
SELECT B_ID
FROM [Table B]
UNION
SELECT C_ID
FROM [Table C]
更新:在聊天中,您说了以下内容:
表A与表B相关,A_ID与表B和表C相关 与B_ID相关
根据上述数据,我认为你没有足够的关系来做到这一点。您可以像A
和B
那样结合:
SELECT A_ID
FROM [Table A]
WHERE X_ID = 1
UNION
SELECT B.B_ID
FROM [Table B] B
INNER JOIN [Table A] A
ON B.A_ID = A.A_ID
WHERE A.X_ID = 1
但根据您所描述的关系,无法将C
加入A
,以便您只获取A.X_ID
为特定值的记录。您可以做的最好的事情是让Table C
中的所有值与B
中匹配A.X_ID
的值匹配至少一次:
SELECT A_ID
FROM [Table A]
WHERE X_ID = 1
UNION
SELECT B.B_ID
FROM [Table B] B
INNER JOIN [Table A] A
ON B.A_ID = A.A_ID
WHERE A.X_ID = 1
UNION
SELECT C_ID
FROM [Table C]
WHERE B_ID IN (
SELECT B.B_ID
FROM [Table B] B
INNER JOIN [Table A] A ON B.A_ID = A.A_ID
WHERE A.X_ID = 1
)
很可能有一种更清洁的方法,但我必须重新开始工作。
tl; dr:您可以近距离接触,但您需要在C_ID
和X_ID
之间建立明确的关系才能实现这一目标。