*********感谢前进*****************

我正在运行此查询:

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


结果是在此图像中:

mysql - Mysql FIND_In_SET返回具有该集合所有值的行-LMLPHP

我想获取所有labId(COLUMN)行,这些行具有与所有testId(column)对应的条目,我们将在find_in_set函数中传递这些条目。
根据上述查询,我​​通过了FIND_IN_SET(labId,'1,2')
它会正确返回所有数据,但多一行包含labId = 3
因为labId =1具有testId=1testId=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 = 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)

关于mysql - Mysql FIND_In_SET返回具有该集合所有值的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40554308/

10-09 10:13