2015-07-29 2 views
0

У меня есть этот запрос, который возвращает 1 столбец столбца.SQL-запрос для результата в двух таблицах

select distinct id_usuario from preference where valor1=? and tipo like '%master%' 

Мне нужно проверить, возвращены ли возвращенные строки в другой таблице. И сохраняйте только записи, которые находятся в обеих таблицах.

Как это сделать, используя только базовый SQL sintax?

Например предположим, что мой первый запрос возвращает:

12 
99 
16 
13 

Теперь искать эти результаты в таблице TableName на колонке ColumnName и я нахожу только эти номера

99 
16 
50 

Так что я буду держать только в качестве конечного результата

99 
16 

ответ

0
select columnname from tablename 
where exists (
select distinct id_usuario 
from preference where valor1=? and tipo like '%master%') 

Вы можете использовать exists или in, чтобы проверить эти идентификаторы из другой таблицы.

1

Используйте common table expressions (CTE), чтобы создать временную таблицу многократного использования и заполнить ее для запросов. Пример:

with cte as 
(
    select distinct id_usuario as col1 from preference where valor1=? and tipo like '%master%' 
) 
select * from cte where col1 in (select ColumnName from tableName) 
+0

Что КТР означает? – Ihidan

+2

cte - это общие выражения таблицы. Это способ создания временных таблиц для работы. [Ниже приведены некоторые сведения] (https://technet.microsoft.com/en-US/library/ms190766 (v = SQL.105) .aspx) –

-1
SELECT columnName 
FROM table2 
WHERE columnName IN 
(SELECT columnName FROM table1) 
Смежные вопросы