2014-07-26 4 views
0

У меня есть таблица, где каждый адрес имеет разные типы, для каждого типа строки. Как найти адреса, где нужны точные типы?TSQL - запрос для нескольких типов в нескольких строках

Например.

ID TypID Street 
1 1  Street 1 
1 2  Street 1 
2 2  Street 2 
3 1  Street 3 
3 2  Street 3 

В приведенном выше мне нужно, чтобы найти адреса, которые имеет тип 1 и 2. Этот результат запроса должен быть с идентификатором Адреса 1 и 3.

ответ

1

группы, по id, а затем рассчитывать различные typeid с в оговорка having

select id from your_table 
where typeid in (1,2) 
group by id 
having count(distinct typeid) = 2 
1

Вы можете использовать INTERSECT для этого

select id 
from tbl 
where typid = 1 
intersect 
select id 
from tbl 
where typid = 2 

хотя он не будет работать в mysql, если это будет база данных, которую вы используете.

+0

спасибо, но это не работает как-то ... – sysboard

+0

@sysboard Это делает работу, как вы можете видеть здесь HTTP: // sqlfiddle. com/#! 6/6abff/1/0. Возможно, вы на самом деле не используете SQL-сервер и используете другую базу данных? –

1

Это может быть сделано с внутренним соединением, как ниже

select y2.* 
from <your_table> Y1 
JOIN <your_table> Y2 
ON Y1.ID = Y2.ID 
AND Y1.Type_id in (1,2) 
AND Y2.ID in (1,3) 
+0

Спасибо за ответ. Juergen d разместил перед вами и его код работает для меня, поэтому я проголосую за вас. – sysboard

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