2016-11-11 94 views
0

********* Thanx在ADvance中*****************Mysql FIND_In_SET返回具有該集合的所有值的行

我是運行此查詢:

SELECT * FROM `test_lab_mapping` tlm 
WHERE FIND_IN_SET(tlm.testID,'1,2') 

而結果是這樣的形象:

FIND THE RESULT OF THAT QUERY

我想所有labId(COLUMN)行具有相應的條目爲ALL的testId(column)我們將在通功能。 按上述查詢我通過FIND_IN_SET(labId,'1,2'); 它返回的所有數據權利,但有一個額外的行,其中labId = 3 作爲labId =1有相應的條目testId=1testId=2 AND labId = 2也有相同的測試id1和2相應的條目。

labId=3只有相應的條目testId=1它沒有testId = 2條目,所以它不應該在結果中。

+0

從所有的I \'M猜你需要發佈聚合過濾,你試圖用FIND_IN_SET來解決,但它'根本不清楚。 – Mihai

+0

親愛的你可以請寫郵件聚合過濾正確的查詢,因爲我是新來的MySQL我沒有太多的知識,它thanx在adv #mihai –

+0

您的查詢做'FIND_IN_SET(testID,'1,2')',不'FIND_IN_SET(labId,'1,2')'。 – Barmar

回答

0

FIND_IN_SET不這樣做。要做到這一點

一種方法是使用您要包括的每個testId聯接:

SELECT labId FROM test_lab_mapping WHERE testId = 1 
    JOIN SELECT labId FROM test_lab_mapping WHERE testId = 2 
    USING (labId) 

這導致僅出現在兩個測試這些labId值。在連接中的第二個SELECT不會導致labId = 3的行,因爲沒有其中testId = 2labId = 3的行,所以labId 3沒有出現在結果中。

如果您需要檢查更多的測試,增加更多JOIN編輯選擇:

SELECT labId FROM test_lab_mapping WHERE testId = 1 
    JOIN SELECT labId FROM test_lab_mapping WHERE testId = 2 
    JOIN SELECT labId FROM test_lab_mapping WHERE testId = 3 
    ... etc 
    USING (labId)