2014-03-27 97 views
0

我有一個名爲call_charges的表,裏面有以下數據。 enter image description here自我加入mysql複雜查詢

我需要獲得所有未付款的付款,其付款重試也未付。

具有transaction_bid非空和is_paid 0,將返回記錄與id 6和10 但是id 6即行有具有支付重試(id 12,與retry_id 6和is_paid 1),所以用id 6行不應該在結果中出現。

我曾嘗試用:

SELECT `call_charges`.* FROM `call_charges` LEFT JOIN `call_charges` AS 
`retries_call_charges` ON `retries_call_charges`.`retry_id` = `call_charges`.`id` 
WHERE `call_charges`.`is_paid` = 0 AND (`call_charges`.`transaction_bid` IS NOT NULL 
AND `call_charges`.`retry_id` IS NULL) 

但它與id 6和10

感謝提前返回兩排。

+0

選擇'call_charges'。* FROM'call_charges' LEFT JOIN'call_charges' AS 'retries_call_charges' ON'retries_call_charges'.'retry_id' ='call_charges'.'id'運行此查詢,看看你會得到什麼,然後創建你的WHERE基於數據。 –

+0

嘿,你想要第10個只... – jmail

+0

是的,只有第10個。 – shweta

回答

2

在這裏你去:

SELECT c1.id 
FROM call_charges c1 
LEFT JOIN call_charges c2 
ON c1.id = c2.retry_id AND c2.is_paid = 1 
WHERE c1.transaction_bid IS NOT NULL 
AND c1.is_paid = 0 
AND c2.id IS NULL 
AND c1.retry_id IS NULL 

工作小提琴:因爲LEFT JOIN已使用http://sqlfiddle.com/#!2/29549/13

c2.id可能爲空。當c1.idc2.retry_id不匹配時,則c2.id將爲NULL。

+0

它的工作,請解釋「c2.id IS NUL」的含義是什麼? 'id'是主鍵,任何記錄都不爲空。 – shweta

+0

它不起作用,如果第12行有is_paid 0,那麼它應該返回第6行和第10行,但它只返回第10行。 – shweta

+0

@shweta修復並更新了上面的答案(包括小提琴)。順便說一句,最後的AND條件可能或可能不需要在你的條件。 –