我有一个Devices
(唯一元素)和一个DeviceTests
表。对于来自Devices
的每个设备,最多有6个不同DeviceTests
。这些测试可以是true
,false
或null
。这些测试的类型从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);
答案 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进行升序排序,如果你没有,那么你会收到错误