*********感谢前进*****************
我正在运行此查询:
SELECT * FROM `test_lab_mapping` tlm
WHERE FIND_IN_SET(tlm.testID,'1,2')
结果是在此图像中:
我想获取所有
labId(COLUMN)
行,这些行具有与所有testId(column)
对应的条目,我们将在find_in_set
函数中传递这些条目。根据上述查询,我通过了
FIND_IN_SET(labId,'1,2')
;它会正确返回所有数据,但多一行包含
labId = 3
因为
labId =1
具有testId=1
和testId=2
的对应条目,并且labId = 2对于testId 1和2也具有相同的对应条目。但是
labId=3
只有与testId=1
对应的条目,而没有testId = 2
条目,因此不应出现在结果中。 最佳答案
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 = 2
和labId
= 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)
关于mysql - Mysql FIND_In_SET返回具有该集合所有值的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40554308/