如何获取mysql中in子句中不存在的数据
我试着在下面的“电子邮件”表上查询如何获取mysql中in子句中不存在的数据,mysql,count,group-by,in-clause,Mysql,Count,Group By,In Clause,我试着在下面的“电子邮件”表上查询 SELECT email_id,count(*) as count FROM email where email_id in ('a@a.com','b@b.com','c@c.com') group by email_id 结果 email_id count a@a.com 3 c@c.com 2 但我想得到如下顺序的结果 email_id count a@a.com 3 b@b.com
SELECT email_id,count(*) as count FROM email
where email_id in ('a@a.com','b@b.com','c@c.com') group by email_id
结果
email_id count
a@a.com 3
c@c.com 2
但我想得到如下顺序的结果
email_id count
a@a.com 3
b@b.com 0
c@c.com 2
供参考b@b.com不存在于电子邮件表中您可以使用:
SELECT e1.email_id, COUNT(e2.email_id) AS count
FROM (SELECT 'a@a.com' AS email_id
UNION
SELECT 'b@b.com'
UNION
SELECT 'c@c.com'
) AS e1
LEFT JOIN email AS e2 ON e1.email_id = e2.email_id
GROUP BY e1.email_id
模式
查询
Left join
可以说是提取丢失的电子邮件。类似的内容可能是:
SELECT t.email_id,count(e.email_id) as count
FROM
(
select 'a@a.com' as email_id union all
select 'b@b.com' union all
select 'c@c.com'
) t
left join email e on t.email_id = e.email_id
group by t.email_id
试试这个:
SELECT 'a@a.com' as email_id,count(1) as `count` FROM email where email_id='a@a.com'
union
SELECT 'b@b.com' as email_id,count(1) as `count` FROM email where email_id='b@b.com'
union
SELECT 'c@c.com' as email_id,count(1) as `count` FROM email where email_id='c@c.com'
可能是
左连接和ifnull()
谢谢您的快速回复。你能以你的方式给我提供一个查询或例子吗?这会对我有很大帮助,但我在in子句中有很多电子邮件id,那么我如何在每个电子邮件id的联合上下文中管理上面的查询呢?这很重要query@Harshal而不是将电子邮件放在由in
操作员使用的逗号分隔的列表中,您可以将它们放在在线表格中。否则,你必须创建一个包含所有电子邮件的临时表或查找表。你的回答为我提供了解决问题的线索,谢谢
SELECT t.email_id,count(e.email_id) as count
FROM
(
select 'a@a.com' as email_id union all
select 'b@b.com' union all
select 'c@c.com'
) t
left join email e on t.email_id = e.email_id
group by t.email_id
SELECT 'a@a.com' as email_id,count(1) as `count` FROM email where email_id='a@a.com'
union
SELECT 'b@b.com' as email_id,count(1) as `count` FROM email where email_id='b@b.com'
union
SELECT 'c@c.com' as email_id,count(1) as `count` FROM email where email_id='c@c.com'