如果至少有一行与MySQL中的条件匹配,则检索所有组记录

时间:2016-09-14 09:46:18

标签: mysql

我有从一系列SQL查询创建的下表,现在我需要检索组中至少有一行符合条件的记录。  enter image description here

例如,我不想检索至少有一个设备状态为 FAILED 的所有群组记录。在我在这里提供的示例中,除了MERCHANT_ID c0030-10155511(两个设备都处于成功状态)之外,我不想检索其中至少有一个设备失败的其他记录以及它的成功设备。例如,MERCHANT_ID c0040-10196477的两个记录都需要获取,因为只有一个设备发生故障。

我们如何才能在MySQL中实现这一目标。

2 个答案:

答案 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
)