我有2个表,我需要一个如下所示的查询
select t1.username,count(*)
from <table1>,<table2>
where <table1.username> in(select username from <table2>)---this is wrong query.
我只是为了表明我需要的方式
如何将table1的列值与table2中特定列的所有值进行比较
当我尝试这个时,它显示错误内部查询返回多个值
答案 0 :(得分:0)
这可以使用JOIN
和GROUP BY
:
select t1.username, count(*)
from table1 t1
join table2 t2 on t1.username = t2.username
group by t1.username
答案 1 :(得分:0)
我想这就是你所追求的:
select t1.username,count(*) as cnt
from table1 t1
where table1.username in (select username from table2)
group by t1.username
答案 2 :(得分:0)
您可以使用内部联接来执行此操作,这将只为您提供具有在table1和table2中匹配的用户名的记录
select t1.username, count(*)
from table1 t1
INNER join table2 t2 on t1.username = t2.username
group by t1.username
如果您想要table1中的所有记录而不管表2中是否匹配,则需要外连接:
select t1.username, count(*)
from table1 t1
LEFT OUTER join table2 t2 on t1.username = t2.username
group by t1.username
编辑解释小组:
分组表示您正在使用具有非聚合列(t1.username)的聚合函数(count(*)),它将组合具有相同非聚合列(t1.username)的行。这允许您使用聚合列和非聚合列。