2011-05-25 36 views
2

有沒有辦法實現的東西,如:MYSQL子集操作

SELECT * 
FROM tb_values 
WHERE (value1, value2, value3) SUBSET_OF 
    (SELECT value 
     FROM tb_value 
     WHERE isgoodvalue = true 
    ) 

更多信息: 我有一個表稱爲項目。每個項目都有標籤。標籤可以由多個項目共享。有一個名爲projectTagMap的映射表。現在用戶使用標籤來過濾項目。使用用戶界面上的複選框選擇標籤。所以用戶選擇幾個標籤來過濾項目。我應該從項目表中選擇包含用戶選擇的所有標籤的項目。

+1

你的代碼來描述你的問題。但是,問題的目的是獲得正確的代碼。你給出的代碼當然不是正確的代碼,那麼我們應該如何弄清楚你真正想從它得到什麼?使用_words_(和圖表)。 – 2011-05-25 11:15:19

+0

哪些值是動態的? 'value1,value2,value3'?他們可以是3或更多或更少? – 2011-05-25 11:16:59

+0

value1,value2等是由用戶提供的,比如在stackoverflow中,你想選擇一個包含所有給定標籤集的問題。 (我的情況更復雜) – joshua 2011-05-25 11:42:27

回答

5

從你的僞代碼,我想這要檢查是否值的(動態的)名單是由提供的另一個列表的子集SELECT。如果是,那麼會顯示一張整個表格。如果沒有,則不會顯示行。

這裏是如何做到這一點:

SELECT * 
FROM tb_values 
WHERE 
    (SELECT COUNT(DISTINCT value) 
     FROM tb_value 
     WHERE isgoodvalue = true 
     AND value IN (value1, value2, value3) 
    ) = 3 

OP的解釋之後更新

SELECT * 
FROM project 
    JOIN 
    (SELECT projectid 
     FROM projectTagMap 
     WHERE isgoodvalue = true 
     AND tag IN (tag1, tag2, tag3) 
     GROUP BY projectid 
     HAVING COUNT(*) = 3 
    ) AS ok 
    ON ok.projectid = project.id 
0

可能是一個原始的方法,但是我想你可以這樣做:

WHERE value1 IN (SELECT value FROM tb_value WHERE isgoodvalue = true) OR value2 IN (...) ... 
+0

感謝Mike,但是我的值列表是動態的。由用戶提供 – joshua 2011-05-25 08:54:50

+0

是的,我有一種感覺,它可能是動態的,不知道一種方法來做到這一點,而不是動態地在腳本語言中構建查詢 – 2011-05-25 09:04:07