join Query以组合两个表

时间:2015-05-26 07:32:35

标签: sql sql-server

我正在寻找查询以从数据库中的两个表中获取输出,如下所示

table1-cities ---->   -------------   Table2----> -------------------------
                      |   City    |               | Person    |  City     |  
                      -------------               -------------------------
                      |   Delhi   |               |  Bob      |   Delhi   |
                      |   Mumbai  |               |  Alice    |   Delhi   |
                      |   Pune    |               |  Tim      |   Pune    |
                      -------------               -------------------------


    Output---->    ---------------------------
                   |   City  |  No.of persons |
                   ---------------------------  
                   |  Delhi  |      2         |
                   |  Mumbai |      0         |
                   |  Pune   |      1         |
                   ----------------------------

我尝试了某种方式,但我没有得到正确的输出。

那我该怎么办?

提前致谢。

此致。

7 个答案:

答案 0 :(得分:6)

试试这段代码:

private void HookHtmlDocumentOnClick()
{
    var document = (IAcroAXDocShim)WebBrowserControl.Document;

    // Just a test
    var obj = document as AcroPDF;
    obj.OnMessage += obj_OnMessage;

}

对于所有零值,请使用左连接

WebBrowserControl.MouseDown += WebBrowserControl_MouseDown;

答案 1 :(得分:3)

试试这个

select c.City,
       count(p.City) as Number_OF_Persons
  from City as c
  left Join Person as p on c.City = p.City
 group by c.City

答案 2 :(得分:1)

试试这个..

    select t1.city,
           Count(t2.city) 
      from table1 t1
      left join table2 t2 on t2.city=t1.city
  group by t1.city

答案 3 :(得分:1)

一些事情:

  • 尽可能使用Id作为主键。
  • 在Person表中创建引用City表(Id)的外键约束。

您可以使用左连接来获得所需内容:

Select 
  c.city, 
  COUNT(p.cityId) "NoOfPerson" 
from 
   TabCity c
   left join TabPerson p on c.Id= p.cityId
group by 
    c.city

此处,cityIdTabPerson表中的外键列,c.IdTabCity表中的主键列

答案 4 :(得分:1)

只要您不添加可能会改变匹配行数的条件,您就可以在加入之前进行计数,这通常更有效:

Select 
  c.City, 
  COALESCE(p.cnt, 0) "No.of persons" -- change NULL to zero for missing cities
from cities c
left join
 (
   Select City, count(*) as cnt
   From persons
   Group by City
 ) p
on c.City= p.City

答案 5 :(得分:1)

试试这个:

Select City, Sum(Cnt) as NoOfPersons From
(Select City, count(*) as Cnt from Table1
Group By City
Union
Select City, count(*) as Cnt from Table2
Group By City)
Group By City

答案 6 :(得分:1)

  

我试过"选择city,count(city)from table2 group by group" -

这没关系,但不容易阅读。由于这是您想要计算每个城市的记录,您应该这样说:count(*)。这个查询当然不会显示孟买,因为它不在表格中。为了显示孟买,您必须在查询中包含cities表。最简单的方法是不加入表格,而只是选择所需的计数:

select city, (select count(*) from table2 where table2.city = table1.city) as no_of_persons
from table1;

这会显示孟买计数为空。如果你想要零,请使用COALESCE:

select 
  city, 
  coalesce((select count(*) from table2 where table2.city = table1.city),0) as no_of_persons
from table1;

如其他人所示,您也可以将table2外连接到table1,然后进行分组和计数。但是,正如您已经看到的那样,这有点容易出错,因为您在计算记录时通常不会使用count(*),而必须使用count(person)(或{{1}为了那个问题),为了不计算外连接的记录。