2014-03-27 99 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条件可能或可能不需要在你的条件。 –