选择所有行设置为true的所有结果

时间:2017-02-17 14:53:28

标签: mysql

我有一个Devices(唯一元素)和一个DeviceTests表。对于来自Devices的每个设备,最多有6个不同DeviceTests。这些测试可以是truefalsenull。这些测试的类型从1到6。

我想提取测试没有错误的所有设备:1,2,3和6.这是我当前的查询:

SELECT
    Devices.*
FROM 
    Devices LEFT JOIN DeviceTests ON Devices.Imei = DeviceTests.Imei
GROUP BY 
    Devices.Imei
HAVING 
    BIT_AND(Result IS NOT NULL OR (Result IS NULL AND TestType IN ('4','5')) AND 
    !BIT_OR(Result IS NOT NULL AND !Result);

1 个答案:

答案 0 :(得分:0)

假设测试没有错误时 DeviceTests.Result 为NULL。我没有'真的明白为什么要使用 HAVING,BIT_AND和BIT_OR 功能。你有一个 where子句,它可以为你提供在数据集上设置条件的选项。

SELECT Devices.* 
FROM Devices 
LEFT JOIN DeviceTests ON Devices.Imei =  DeviceTests.Imei 

WHERE DevicesTests.TestType IN ('1','2', '3', '6') 
AND DeviceTests.Result IS NULL
GROUP BY Devices.Imei 
ORDER BY DeviceTests.Id ASC

还假设您的 DeviceTests 表中有 Id 列,并且您希望按测试ID进行升序排序,如果你没有,那么你会收到错误