根据满足条件的所有孩子选择父母

时间:2012-11-12 11:06:54

标签: mysql

这是一个很简单的问题,但出于某些原因,我今天无法理解它。

我有两个实体: - titleproduct,分别命名为tbl_titletbl_product。每个title都可以有多个products

产品表中有一个名为unwanted的字段,可以是null01

我希望根据所有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}}

这显然不起作用。

那我该如何编写这样的查询呢?

4 个答案:

答案 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 = 0wanted = 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