CODE | ID_C
--------------------------
IUS/06 | 0108
IUS/06 | 0108
MAT9 | 0124
MAT9 | 0124
MAT9 | 0124
PROGR12 | 0124
PROGR12 | 0124
PROGR12 | 0124
PROGR12 | 0124
TEC12 | 0150
SNT6 | 0150
FPN3 | 0103
BSD9 | 0103
和另一个这样的表:
ID_C
----
0150
0108
和最后一个像这样:
ID_C
----
0124
现在。我希望可视化第一个表中的所有行,其中id_c等于第二个表中的任何id_c,并且id_c等于第三个表中的id_c。现在第三个表更像是单个数据,而第二个表是数据集合。在示例中,这将在输出中生成第一个表减去ID_C = 0103的行。
感谢您的时间,这位新手向您致敬。
答案 0 :(得分:1)
你仍然需要一个INNER JOIN
,只是更复杂的一个:
SELECT
t1.CODE,
t1.ID_C
FROM table1 t1
INNER JOIN
(SELECT ID_C FROM table2 t2
UNION
SELECT ID_C FROM table3 t3) un
ON t1.ID_C = un.ID_C
Here's a SQLFiddle此查询的实际效果。
table1中有重复的行,但如果您不想在此结果集中重复,则可以将第一个SELECT
更改为SELECT DISTINCT
。请注意,这会导致(有时是严重的)性能损失。
我做的是UNION
第二个和第三个表一起得到我感兴趣的所有ID_C
值的一大部分,然后使用INNER JOIN
来限制{的行数{1}}仅限那些具有这些值的行。
答案 1 :(得分:1)
为什么要让它变得如此复杂呢?可能就是这样:
SELECT CODE, ID_C
FROM table1st
WHERE ID_C IN (SELECT ID_C FROM table2nd)
OR ID_C IN (SELECT ID_C FROM table3rd)