2016-09-14 14 views
0

我有一系列SQL查询创建的下表,现在我需要检索记录,如果组中至少有一行匹配条件。 enter image description here如果至少有一行匹配MySQL中的条件,则检索所有组记录

比如我wan't检索所有组记录,其中设备的状态的至少一个是失败。在我提供的例子中,除了MERCHANT_ID c0030-10155511(两个设备都处于成功状态)之外,我不想检索至少有一台设备与其成功设备一起失败的其他记录。例如,MERCHANT_ID c0040-10196477的两个记录都需要提取,因为只有一个设备失败。

我们如何在MySQL中实现这一点。

+1

请编辑您的问题,以便以文本格式包含示例数据,而不是图像。 –

+0

表格出来了,因此我添加了一个图像 – CoolCK

+1

如果它与问题无关,最好截断某些列,或者甚至省略整列。带图像的困难之处在于,我们不能将其用作模拟所提供示例数据的来源。 –

回答

2

试试这个

SELECT 
    * 
FROM 
    yourTable 
WHERE 
    merchant_id IN 
    (
     SELECT 
      merchant_id 
     FROM 
      yourTable 
     WHERE 
      state LIKE '%FAILED') 
+0

这不会取得成功的行对应于成功。 – CoolCK

+0

尝试新的声明,我认为这是你正在寻找的 – sh88

+0

这正是我正在寻找的。谢谢:) – CoolCK

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 
) 

如果状态栏是枚举类型,查询可以写成

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 
) 
相关问题