2

这是一个如此简单的问题,但由于某种原因,我今天无法理解它。

我有两个实体:-每个实体分别命名为title和。每个可以有很多。producttbl_titletbl_producttitleproducts

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

我希望title根据所有products (ALL)unwanted设置为的位置来选择所有 s 1。因此,换句话说,我希望根据满足特定条件的所有孩子来选择父母。因此,如果 atitle有一个productunwanted但另一个不是,我不希望它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

这显然是行不通的。

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

4

4 回答 4

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
于 2012-11-12T11:14:29.053 回答
2
select * from tbl_title
where id not in (select title_id from tbl_product where unwanted = 0)

在英语中,此查询会消除所有具有所需产品的标题。


从风格的角度来看,最好叫你的专栏wanted,因为unwanted = 0它是一个双重否定的wanted = 1。了解积极因素总是更容易。

于 2012-11-12T11:20:14.793 回答
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))
于 2012-11-12T11:09:52.013 回答
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
于 2012-11-12T11:14:59.643 回答