【问题标题】:How to query multiple tables in mysql如何在mysql中查询多个表
【发布时间】:2020-09-15 12:58:19
【问题描述】:

我正在尝试查询三个表,我的表结构如下

Table 1: info table
  
id name  pincode
1  Lele   560099
2  John   560099
3  Marium 560077
Table 2: area table

id area pincode 
1 Nagar 560099
Table 3: Region table

id area  latitude  longitude
1  Nagar 10.23456  10.9865

现在我要获取的是留在 Nagar 的用户数,以及我正在尝试获取该区域的纬度和经度。 预期输出应该是

usersCount areaName  pincode   lat       long
  2        Nagar     560099   10.23456  10.9865

到目前为止,我尝试了以下查询:

select 
count(distinct info.id)as usersCount,
area.area as area_name,
are.pincode as pincode,
region.latitude as latitude,
region.longitude as longitude
from 
info, area, region
where 
area.area = "Nagar" 

上面的查询给了我空白输出。 我不确定我在这个查询中哪里出错了。任何帮助将不胜感激。

【问题讨论】:

  • 今日提示:始终使用现代、明确的JOIN 语法!更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接。

标签: mysql sql jdbc


【解决方案1】:

您错过了表和组之间的连接条件来计算用户数:

SELECT count() as usersCount, r.areaName, a.pincode, r.lat, r.long
  FROM region r
       INNER JOIN area a on a.area = r.areaName
       INNER JOIN info i on i.pincode = a.pincode
 WHERE area.area = 'Nagar'
 GROUP BY r.areaName, a.pincode, r.lat, r.long

【讨论】:

  • 您的数据有问题吗? f.e. 'Nagar'(空间)而不是'Nagar'。 pincode 是相同数据类型的两次吗?如果您只测试加入区域和区域会怎样。
  • 是的,如果您要问的话,两个表中的 Pincode 是相同的数据类型?
  • 并且两个表中的“Nagar”相同。如果您没有收到 SQL 错误,而只是一个空结果,并且您的所有表都有正确的数据,则查询应该返回值。因此,请一一检查您的加入条件。
  • 'Nagar' 在两个地方都是一样的,它不会抛出错误。但结果是空的
  • 这听起来可能很愚蠢,但您是否测试过简单的select * from areaselect * from regionselect * from info?我认为您的问题与查询本身无关。
【解决方案2】:

您可能对相关子查询有所帮助:

select r.*,
       (select count(*)
        from area a join
             info i
             on i.pincode = a.pincode
        where a.area = r.areaname
       ) as cnt
from region r
where name 'Nagar';

这通常比使用聚合的查询具有更好的性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    相关资源
    最近更新 更多