2015-03-14 2 views
0

глупый вопрос. У меня есть таблица, как этотКак выбрать набор строк из таблицы путем сопоставления столбцов?

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, из второй таблицы AND id_c, равной той, что указана в третьей таблице. теперь третья таблица больше похожа на единую датуту, а вторая таблица представляет собой набор данных. В примере это приведет к выходу первой таблицы за вычетом строки с ID_C = 0103.

Благодарим вас за ваше время, этот новичок sql приветствует вас.

+0

Вы хотите 'ВНУТРЕННИЙ JOIN' две таблицы вместе на этих колонках –

+0

фактически проблема немного отличается, потому что вторая таблица на самом деле 2 таблицы: в первом мы находим 0124, а в другом 0108, извините за ошибку! – darkpirate

+0

Можете ли вы изменить свои данные образца в своем вопросе, чтобы отразить это требование? –

ответ

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) 
+0

это теоретически работает. Но, правда, скажем, таблица 2-й и 3-й таблицы фактически представляют собой два набора результатов, полученные из других запросов. я хотел что-то подобное, потому что я уже решил часть проблемы, и это решение лучше вписывалось в мое. ваши работы также, но я должен полностью изменить внешний запрос. Конечно, ваш ответ основан на моем вопросе, так что все в порядке. С наилучшими пожеланиями – darkpirate

+0

С небольшими изменениями я фактически сделал ваше решение тоже.Очень элегантно, спасибо – darkpirate

+0

Просто для ясности, так как вторая и третья таблицы, где результирующие наборы, я использовал подзапрос как параметр IN – darkpirate

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 этого запроса в действии.

В таблице 1 есть повторяющиеся строки, но если вы не хотите дублировать в этом результирующем наборе, вы можете изменить первый SELECT на SELECT DISTINCT. Просто имейте в виду, что это повлечет за собой (иногда суровое) наказание в исполнении.

Что я сделал UNION второй и третий таблицей вместе, чтобы получить один большой набор всех ID_C значений я был заинтересован в, а затем использовал INNER JOIN ограничить строки table1 только те строки, которые имели эти значения.

Technet: INNER JOIN

Technet: UNION

+0

блестящий! так что вы действительно можете это сделать. Оно работало завораживающе ! Большое спасибо! – darkpirate

+0

@ user1888132 Как вы узнаете больше о SQL и теории множеств, вы будете поражены тем, что на самом деле возможно ... –

Смежные вопросы