如何通过匹配列从表中选择一组行?

时间:2015-03-14 19:12:44

标签: sql oracle

愚蠢的问题。 我有这样一张桌子

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的行。

感谢您的时间,这位新手向您致敬。

2 个答案:

答案 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}}仅限那些具有这些值的行。

Technet: INNER JOIN

Technet: UNION

答案 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)