我有一个这样的表:
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
在此表的方法列中,有2个方法
INVITE
和BYE
具有相同的callid。我需要像具有INVITE
且没有具有相同callid的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'
任何人都可以帮助我。
最佳答案
您可以在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
关于mysql - 嵌套选择语句的MySQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34744604/