2016-11-11 99 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)