【问题标题】:SQL Join to Display Data from two TablesSQL 连接以显示两个表中的数据
【发布时间】:2016-03-24 01:16:27
【问题描述】:

有两个表(Profile 和 Location)有一个共同的 ID 字段。每个表都驻留在同一服务器上的单独数据库中。我需要显示每个表中的列。 Profile 表有 50 条记录需要与 Location 表中的 50 条匹配记录一起显示。这是我的查询:

SELECT a.id, a.city, b.state FROM profile a JOIN Location b on a.id=b.id

当我运行上述查询时,返回了 50 多条记录。当我从查询中删除 b.state 时,它​​返回 50 条记录。当我将 b.state 添加到查询中时,有些地方不对劲。需要返回的50个州应该是Profile表中每个城市相关的州,根据两者的共同ID。

个人资料表数据:

列表项

配置文件表数据: id|城市 1|芝加哥 2|迈阿密 3|底特律

状态表数据: id|州|人口 1|伊利诺伊|10MM 2|佛罗里达|20MM 3|密歇根|5MM 4|弗吉尼亚|7MM 5|路易斯安那|3MM

我想根据 ID 显示 Profile 表中的所有内容以及 State 表中的匹配项,以显示 State 和 Population 列。

【问题讨论】:

  • edit 包含两个表中的样本数据以及您希望从该样本中获得的结果。
  • @sa-meeh 在下面的“答案”中,我根据您在问题中提供的数据提供结果。但显然你正在寻找不同的结果。您能否帮助我们了解您的期望?
  • 嗨@Ralph。我想显示两个表中的字段组合。例如,ID、城市和州。如果两个表上的 ID 匹配,则应显示基于匹配 ID 的城市及其相关州匹配。我的查询返回许多结果。我在 Profile 表中只有 50 条记录。查询应该只返回 ID 与 State 表中的 ID 匹配的 50 条记录。

标签: sql-server join sql-server-2012


【解决方案1】:

这不是一个答案,而只是一种更易于使用的示例数据格式:

declare @Profile table
    (
     id int identity(1, 1)
            primary key
            not null,
     City nvarchar(20)
    )

insert  into @Profile
values  (N'Chicago'),
        (N'Miami'),
        (N'Detroit')

declare @State table
    (
     id int identity(1, 1)
            primary key
            not null,
     State nvarchar(20),
     Population nvarchar(10)
    )

insert  into @State
values  (N'Illinois', N'10MM'),
        (N'Florida', N'20MM'),
        (N'Michigan', N'5MM'),
        (N'Virginia', N'7MM'),
        (N'Louisiana', N'3MM')

select  a.id,
        a.City,
        b.State
from    @Profile a
join    @State as b
on      a.id = b.id

【讨论】:

    【解决方案2】:

    您需要一个内部连接来过滤掉不匹配的内容(您的示例没有详细说明要使用哪种类型的连接):

    SELECT a.id, a.city, b.state 
    FROM [profile] a 
    INNER JOIN Location b on a.id=b.id
    

    也可能有重复,这意味着你可以试试这个:

    SELECT DISTINCT a.id, a.city, b.state 
    FROM [profile] a 
    INNER JOIN Location b on a.id=b.id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2017-08-30
      • 1970-01-01
      相关资源
      最近更新 更多