2011-05-04 56 views
1

原來的問題是以下開發MySQL的問題:其中A IN()和IN() - 從其中A = 1和A = 2返回0行

Where A=1 AND A=2 returns 0 row problem - (Short Mysql question)

感謝一些有用的答案。 (但很快我意識到我可能過於簡單化的問題)

其實真正的問題是:

Tag 1,2,3 - category A 
Tag 4,5,6 - category B 
Tag 7,8,9 - category C 

我要實現「OR條件」爲同一類別,但「AND條件」爲不同的類別。 所以我可能要返回類似

-- I want id with Tag 1,4 or 1,2,4 but not 4 
SELECT id FROM table WHERE Tag IN (1,2) AND Tag (4) 

-- Tag 1,4 or 1,5 but not 1 
SELECT id FROM table WHERE Tag IN (1) AND Tag (4,5) 

-- Only Tag 1,4,9 
SELECT id FROM table WHERE Tag IN (1) AND Tag (4) AND Tag (9) 

我試圖從答案弄清楚,但任何快速指南,將不勝感激!

回答

1

從我的理解要返回的標籤的ID至少在2個不同的分類上,試試這個:

Select id from Table 
WHERE tag_category in (A,B,C) 
Group by id 
Having count(distinct tag_category) >= 2 
+0

這有幫助。謝謝! – user706087 2011-05-05 01:26:32

0

這聽起來像你有'必須有'的條件,但你只想選擇那些在你的可選列表中。

試試這個:

SELECT id from Table 
WHERE Tag IN (1,2) 
AND EXISTS (SELECT 1 FROM Table WHERE Tag=4) 

目前還不清楚您的源數據的樣子。你能澄清嗎?

1

聽起來像是你想已經標記與給定的標籤ID(只有那些被標記了所有給定的標籤ID),這些類別:

Select id from Table 
WHERE tag in (A,B,C) 
Group by id 
Having count(id)>=3 
+0

這有幫助。謝謝! – user706087 2011-05-05 01:27:05

0

這與我之前回答的問題基本相同。

區別在於HAVING條款。現在它爲每個標籤組分配一個不同的編號。所以id in (1,2)的編號是1else子句適用於標籤號4,這些標籤的組號爲2。然後,它計算該id的不同標籤組號的數量,並且只返回id,其計數爲2意味着兩個標籤組都存在。

SELECT id 
FROM table 
WHERE Tag in (1,2,4) 
GROUP BY id 
HAVING COUNT(DISTINCT CASE WHEN Tag in (1,2) THEN 1 ELSE 2 END) = 2  
+0

其他2個查詢對於動態生成的代碼看起來更簡單。 (查詢必須隨着類別的增長而生成)但是,還是謝謝。你們都激勵我完成我的代碼。 :) – user706087 2011-05-05 01:30:44

+0

@user - 另外兩個你認爲有幫助的評論並不像他們會對我有用! – 2011-05-05 09:26:30