2

これはとても単純な問題ですが、なぜか今日は頭を悩ませることができません。

私には2つのエンティティがあります:-titleそしてproductそれぞれ名前tbl_titletbl_product。それぞれtitleが多くを持つことができますproducts

productテーブルには、、またはのいずれかであると呼ばれるフィールドがありunwantedます。null01

すべてのs(ALL)がに設定されているtitle場所に基づいてすべてのsを選択したいと思います。つまり、特定の条件を満たすすべての子に基づいて親を選択したいと思います。したがって、あるものがあるがそうでないものがある場合、これが結果セットに入ることを望んでいません。productunwanted1titleproductunwantedtitle

私がこれを試してみると、頭から離れるのは次のとおりです。

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 = 0wanted = 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 に答える