2016-09-14 45 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 
) 
相關問題