2016-08-03 68 views
0

所以我有一個有點複雜的MySQL查詢問題。我有3張桌子。一個是一個項目表。一個是類別表。一個是鏈接表,只有2個字段,itemID和categoryID。這是一種多對多的關係,因此一個項目可以分爲多個類別,每個類別可以有多個項目。現在類別表中的兩個字段是isactive並且是main。它們只是1或0的布爾值。我想要獲取僅屬於類別中的所有項,其中isactive = 0或ismain = 0或兩者都是。選擇項目只在某些類別的行

我花了一些時間,並設置了一個sql小提琴讓別人玩耍。 http://sqlfiddle.com/#!9/b03842/2

回答

0

解決方案使用子查詢:

SELECT DISTINCT i.* FROM cart_item i 
    JOIN cart_item_category ic ON i.itemref = ic.itemref 
    WHERE ic.catid IN ( 
    SELECT id FROM cart_category WHERE active = 0 OR ismain = 0 
) 
+0

但是可以改變這些條件以活性<> 1 OR ismain <> 1,因爲要爲那些列接受NULL值。 –

+0

這是更接近。但它仍然返回屬於有效和無效類別的項目。 – dmikester1

+0

你必須添加一個AND NOT IN(SELECT ID FROM cart_category WHERE active = 1 AND ismain = 1)嗎?類似的東西? – dmikester1