ITicDigger
@ITicDigger

Как в SQL выбрать с условием И по полю связанной 1-n таблицы?

Есть две таблицы: сущность и свойства сущщности.
Сущность:
Название | ID

Свойства:
ID сущности | свойство

Как сделать выборку всех сущностей со свойствами "1" И "2"?
Именно чтобы и свойство 1 и свойство 2 присутствовало у этих сущностей.

Платформа - Libre Office Base, но спрашиваю просто про SQL в самом общем смысле.
  • Вопрос задан
  • 262 просмотра
Решения вопроса 2
ITicDigger
@ITicDigger Автор вопроса
Сам изобрёл такой вот велосипед (корорый в последствии сделал ещё короче. См. в комменте):
SELECT *
FROM "сущность"
WHERE
	(
		SELECT COUNT(*) FROM "свойства" WHERE "свойства"."ID сущности" = "сущность"."ID" AND
		(
			свойство = '1' OR
			свойство = '2'
		)
	) = 2 --тут количество свойств на которые накладываются условия!

Вроде не плохо. Если кто знает поизящнее - делитесь.
Ответ написан
@sash999
просто админ из деревни
Длиннее, но кмк читабельнее:

select * from t1 where exists ( select * from t2 where t2.id= t1.id and property = 'property1') and exists (select * from t2 where t2.id=t1.id and property = 'property2');
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@getredtm1
WITH cte AS (
SELECT * FROM Свойства 
WHERE свойство in (1,2)
)

SELECT Название 
FROM Сущность 
WHERE ID in (
SELECT distinct c.id 
FROM cte, Сущность c 
WHERE c.id = cte.id
GROUP BY (c.id)
HAVING COUNT(c.id) > 1
)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы