select语句使用内部查询比较同一列的多个值

时间:2014-05-13 12:43:46

标签: sql

我有2个表,我需要一个如下所示的查询

select t1.username,count(*)  
from <table1>,<table2> 
where <table1.username> in(select username from <table2>)---this is wrong query. 

我只是为了表明我需要的方式

如何将table1的列值与table2中特定列的所有值进行比较

当我尝试这个时,它显示错误内部查询返回多个值

3 个答案:

答案 0 :(得分:0)

这可以使用JOINGROUP 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)的行。这允许您使用聚合列和非聚合列。