【问题标题】:Joining together results of two select statements将两个 select 语句的结果连接在一起
【发布时间】:2021-03-25 00:40:36
【问题描述】:

我有以下架构,但我只是停留在一个特定的部分。

CREATE TABLE Suppliers (ID INT, Name VARCHAR(128), Postcode VARCHAR(10));

CREATE TABLE Branches (ID INT, Name VARCHAR(128), Postcode VARCHAR(10));

CREATE TABLE Postcode_States (ID INT, State VARCHAR(128), Postcode VARCHAR(10));


SELECT S.Name AS SupplierName, PS.State AS SupplierState
FROM Suppliers AS S 
LEFT JOIN Postcode_States PS ON S.Postcode = PS.Postcode;

SELECT B.Name AS BranchName, PS.State AS BranchCounty
FROM Branches AS B 
LEFT JOIN Postcode_States PS ON B.Postcode = PS.Postcode;

我有三个表,Suppliers、Branches 和 Postcode_States。我在一个查询中选择了所有加入邮政编码的供应商及其状态,并在另一个查询中选择了所有加入邮政编码的分支机构及其状态。谁能给我任何关于如何结合这两个查询的指导,以便我可以返回所有具有相同状态的供应商和分支机构?谢谢

样本数据和请求的查询输出

【问题讨论】:

  • 样本数据预期输出将在这里有用
  • 和什么状态一样?您目前正在退回所有供应商。
  • 我想返回包含状态相同的供应商名称和分支名称的行
  • @user1501171 。 . .德克萨斯州与哪个州相同?

标签: sql sql-server inner-join


【解决方案1】:

你可以加入:

select s.name, b.name, p.state
from suppliers s
inner join branches  b on b.postcode = s.postcode
inner join postcodes p on p.postcode = s.postcode

【讨论】:

    【解决方案2】:

    如果您想要多个供应商的州,您可以使用窗口函数:

    select s.*
    from (select s.name, b.name, p.state,
                 count(*) over (partition by state) as cnt
          from suppliers s join
               branches b
               on b.postcode = s.postcode join
               postcodes p
               on p.postcode = s.postcode
         ) s
    where cnt >= 2
    order by cnt desc, state;
    

    这不会返回德克萨斯州,但您的问题表明您想要重复。

    【讨论】:

      猜你喜欢
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      相关资源
      最近更新 更多