这是一个很简单的问题,但出于某些原因,我今天无法理解它。
我有两个实体: - title
和product
,分别命名为tbl_title
和tbl_product
。每个title
都可以有多个products
。
产品表中有一个名为unwanted
的字段,可以是null
,0
或1
。
我希望根据所有title
s(ALL)将product
设置为unwanted
的位置选择所有1
。所以换句话说,我希望根据满足某种条件的所有孩子选择父母。因此,如果title
有一个product
unwanted
而另一个title
不是,我不希望此SELECT * FROM `tbl_title`
left join tbl_product on tbl_product.title_id = tbl_title.id
where tbl_product.unwanted = 1
group by tbl_title.id
输入结果集。
当我尝试这个时,我最开始的是:
{{1}}
这显然不起作用。
那我该如何编写这样的查询呢?
答案 0 :(得分:2)
SELECT t.id
FROM `tbl_title` t
left join tbl_product p on p.title_id = t.id
group by t.id
having sum(p.unwanted = 0 or p.unwanted is null) = 0
答案 1 :(得分:2)
select * from tbl_title
where id not in (select title_id from tbl_product where unwanted = 0)
在英语中,此查询会删除所有具有所需产品的标题。
从样式的角度来看,最好调用您的专栏wanted
,因为unwanted = 0
是wanted = 1
的双重否定。能够更好地了解积极因素。
答案 2 :(得分:1)
尝试使用这样的子查询:
SELECT * FROM `tbl_title` AS t
WHERE EXISTS (SELECT 1 FROM products WHERE title_id = t.id AND unwanted = 1)
AND NOT EXISTS (SELECT 1 FROM products WHERE title_id = t.id AND (unwanted = 0 OR unwanted IS NULL))
答案 3 :(得分:0)
仅适用于title
表
SELECT *
FROM `tbl_title` AS t
JOIN tbl_product AS v ON t.id = v.title_id
WHERE NOT EXISTS(
SELECT *
FROM tbl_product
WHERE (t.id = title_id)
AND (unwanted = 0 OR unwanted IS NULL)
GROUP BY t.id