我有从一系列SQL查询创建的下表,现在我需要检索组中至少有一行符合条件的记录。
例如,我不想检索至少有一个设备状态为 FAILED 的所有群组记录。在我在这里提供的示例中,除了MERCHANT_ID c0030-10155511(两个设备都处于成功状态)之外,我不想检索其中至少有一个设备失败的其他记录以及它的成功设备。例如,MERCHANT_ID c0040-10196477的两个记录都需要获取,因为只有一个设备发生故障。
我们如何才能在MySQL中实现这一目标。
答案 0 :(得分:1)
试试这个
SELECT
*
FROM
yourTable
WHERE
merchant_id IN
(
SELECT
merchant_id
FROM
yourTable
WHERE
state LIKE '%FAILED')
答案 1 :(得分:0)
可以说,您的表名是device_table
SELECT *
FROM device_table d1
WHERE EXISTS (
SELECT *
FROM device_table d2
WHERE d2.state like '%FAILED'
AND d1.merchant_id = d2.merchant_id
)
如果state列是enum类型,则查询可以写为
SELECT *
FROM device_table d1
WHERE EXISTS (
SELECT *
FROM device_table d2
WHERE d2.state in ('DOWNLOAD_FAILED', 'INITIATE_FAILED', etc...)
AND d1.merchant_id = d2.merchant_id
)
或者,
SELECT *
FROM device_table d1
WHERE EXISTS (
SELECT *
FROM device_table d2
WHERE d2.state not in ('INITIATE_SUCCESS')
AND d1.merchant_id = d2.merchant_id
)