我正在尝试为MySQL编写一个查询,选择所有父项,其中包含每个条件的子记录。我的架构比这更复杂,但这就是这个想法。
例如:
id,....
parent_id,id,key,value
所以,
{{1}}
如果我'或'他们在一起它很有效,但我需要它是独家的,而不是包容性的。
答案 0 :(得分:1)
查询的问题是ct.key不能与同一行中的keyname1和keyname2相同。您需要多次检查子表或使用条件聚合。这是使用exists
:
SELECT id
FROM parent_table pt
WHERE EXISTS (
SELECT 1
FROM child_table ct
WHERE pt.id = ct.parent_id
AND ct.key = 'keyName1'
AND ct.value = 'value1') AND EXISTS (
SELECT 1
FROM child_table ct
WHERE pt.id = ct.parent_id
ct.key = 'keyName2' AND
ct.value = 'value2')
或者您可以使用条件聚合:
select id
from parent_table pt
where exists (
select 1
from child_table ct
where pt.id = ct.parent_id
group by ct.parent_id
having sum(case when ct.key = 'keyname1' and ct.value = 'value1'
then 1 else 0 end) > 0 and
sum(case when ct.key = 'keyname2' and ct.value = 'value2'
then 1 else 0 end) > 0 )
使用distinct
多个joins
:
select distinct pt.id
from parent_table pt
join child_table ct1 on pt.id = ct1.parent_id and
ct1.key = 'keyname1' and
ct1.value = 'value1'
join child_table ct2 on pt.id = ct2.parent_id and
ct2.key = 'keyname1' and
ct2.value = 'value1'