2017-04-25 30 views
0

我有一個查詢,顯示這樣的結果:MySQL查詢,刪除行如果兩個字段爲空

Zip | Left Price | Right Price 
17901 | 100.00  | null 
17820 | null  | 40.00 
54353 | null  | null 
53133 | 40.00  | 542.00 

如何刪除那些左,價格價格爲空的結果。所以我不想讓這裏的郵編54353甚至顯示在結果中。

以下是我做了我的查詢:

SELECT contacts.zip, CASE WHEN 
left_return_date IS NULL AND left_delivery_date IS NOT NULL AND left_price 
IS NOT NULL THEN left_price ELSE null END AS left_price, CASE WHEN 
right_return_date IS NULL AND right_delivery_date IS NOT NULL AND 
right_price IS NOT NULL THEN right_price ELSE null END AS right_price 
FROM invoice_hearing_aids 
LEFT JOIN invoices ON invoices.ID = invoice_hearing_aids.invoice_id 
LEFT JOIN contacts ON contacts.id = invoices.contact_id 
WHERE 
trial_complete = 'Y' 
AND invoices.company_id = '1' 
AND invoices.date_issued >= DATE_SUB(NOW(),INTERVAL 1 YEAR) 
+0

是什麼問題? – Jenish

回答

0

您可以在結尾處添加HAVING條款,如:

SELECT contacts.zip, CASE WHEN 
left_return_date IS NULL AND left_delivery_date IS NOT NULL AND left_price 
IS NOT NULL THEN left_price ELSE null END AS left_price, CASE WHEN 
right_return_date IS NULL AND right_delivery_date IS NOT NULL AND 
right_price IS NOT NULL THEN right_price ELSE null END AS right_price 
FROM invoice_hearing_aids 
LEFT JOIN invoices ON invoices.ID = invoice_hearing_aids.invoice_id 
LEFT JOIN contacts ON contacts.id = invoices.contact_id 
WHERE 
trial_complete = 'Y' 
AND invoices.company_id = '1' 
AND invoices.date_issued >= DATE_SUB(NOW(),INTERVAL 1 YEAR) 
HAVING 
    right_price IS NOT NULL OR left_price IS NOT NULL 

這將正常工作,如果你有相對較少的這種無用的記錄(我最多可以完成結果集大小的50%)。如果還有更多這樣的記錄,那麼我會仔細查看查詢,並且很可能會修改條件。

0

執行該left_price和right_price是你可以ADDA列值AFCT where條件

SELECT contacts.zip, 
     CASE WHEN left_return_date IS NULL 
      AND left_delivery_date IS NOT NULL 
      AND left_price IS NOT NULL THEN left_price 
      ELSE null END AS left_price, 
     CASE WHEN right_return_date IS NULL 
      AND right_delivery_date IS NOT NULL 
      AND right_price IS NOT NULL THEN right_price 
      ELSE null END AS right_price 
    FROM invoice_hearing_aids 
    LEFT JOIN invoices ON invoices.ID = invoice_hearing_aids.invoice_id 
    LEFT JOIN contacts ON contacts.id = invoices.contact_id 
    WHERE 
    trial_complete = 'Y' 
    AND invoices.company_id = '1' 
    AND invoices.date_issued >= DATE_SUB(NOW(),INTERVAL 1 YEAR) 
    AND NOT (left_price IS NULL AND right_price IS NULL) 
+0

這不會過濾掉的記錄,如果他們沒有在表中無效,但在'其他條件CASE'使其顯示爲空 - 例如,當'left_delivery_date'和'right_delivery_date'爲空。 –

+0

HAVING條件現在似乎工作。我只是想知道是否有更好的方法來編寫我的查詢以避免使用HAVING。這會更好嗎?感謝您的幫助。 –

+1

如果您的數據不需要對結果的過濾器,但與添加的正確選擇在那裏的條件就可以使用具有條件所提出的查詢避免..等你不要選擇無用行..但這個建議取決於您的數據..內容 – scaisEdge