嵌套select语句的MySql查询

时间:2016-01-12 13:09:59

标签: mysql select

我有一张这样的表:

id   method  callid
-------------------------
1    INVITE  pW.wKkwjxt
2    BYE     pW.wKkwjxt
3    INVITE  YcIEWypRd
4    BYE     YcIEWypRd
5    INVITE  .--.jr1oji1ddt
6    BYE     .--.jr1oji1ddt
7    INVITE  rM7D3IhQR
8    INVITE  kUc0YNjQy
9    INVITE  S07wSM3G
10   BYE     rM7D3IhQR

在此表方法列中,有两个方法INVITEBYE具有相同的callid。我需要查询,例如callid具有INVITE且没有BYE具有相同的callid

输出如下:

id  method  callid
---------------------
8   INVITE  kUc0YNjQy
9   INVITE  S07wSM3G 

我尝试使用以下查询但未获得正确的输出。

SELECT `ac1`.`method`,`ac2`.`method`,`ac1`.`callid`,`ac2`.`callid`,`ac1`.`id`,`ac2`.`id` 
FROM `acc` `ac1`
join `acc` `ac2` ON `ac1`.`callid` = `ac2`.`callid` and `ac2`.`method` != 'BYE'

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

你可以在callid上进行左连接,当它没有匹配的callid时,它将为null,这样你就可以a2.id IS NULL来过滤掉那些。

SELECT `ac1`.`method`,`ac2`.`method`,`ac1`.`callid`,`ac2`.`callid`,`ac1`.`id`,`ac2`.`id` 
FROM acc a1
LEFT JOIN acc a2 ON a2.callid=a1.callid AND a2.method='BYE'
WHERE a1.method='INVITE' 
AND a2.id IS NULL