【问题标题】:SQL Server : joining a table by multiple parametersSQL Server:通过多个参数加入表
【发布时间】:2015-12-03 15:09:29
【问题描述】:

基于FNameLName,我需要加入 2 个表。

这就是表格当前的样子

表A

  • Fname
  • 名字
  • 城市
  • 电子邮件

表B

  • Fname
  • 名字
  • 地址
  • 城市
  • 状态

我想返回 1 个数据集,该数据集向我显示使用 FNameLNameCity 作为复合唯一键的用户的所有数据。

SELECT TOP (10) 
    dbo.TableA.Fname, dbo.TableA.Lname, dbo.TableA.Email, dbo.TableA.Party
    , dbo.TableB.DONR_MAIL_ORD, dbo.TableB.DONR_CHARITABLE, 
FROM    dbo.TableA 
        INNER JOIN dbo.TableB 
        ON dbo.TableA.Fname = dbo.TableB.FN AND dbo.TableA.Lname = dbo.TableB.LN
WHERE  (dbo.TableA.Party = 'r') 
    AND (dbo.TableB.DONR_MAIL_ORD = 'y') 
    AND (dbo.TableB.DONR_CHARITABLE = 'y') 
    AND (dbo.TableB.DONR_POL = 'y') 

【问题讨论】:

  • 您能否提供示例数据和您的预期输出?
  • @Praveen,到底有什么区别?还是您只是喜欢看自己打字但实际上不知道要回答什么?

标签: sql sql-server


【解决方案1】:

尝试这样做,

SELECT *
  FROM TableA A1 INNER JOIN TableB B2 ON 
  A1.Fname = B2.Fname AND 
  A1.Lname = B2.Lname AND 
  A1.City = B2.City;

您可以参考 SO 的这个问题 Join table with composite key twice &这个Join tables on columns of composite foreign / primary key in a query

【讨论】:

    【解决方案2】:

    假设您只需要两个表中的 Fname、Lname 和 City 的唯一列表。如果您只是加入表,您最终将只得到两个表中匹配的数据。如果是这种情况,请使用 ali786 的答案。如果您尝试从两个表中查找唯一列表,请使用以下答案:

    SELECT DISTINCT Fname, Lname, City FROM TableA
    UNION
    SELECT DISTINCT Fname, Lname, City FROM TableB
    
    编辑:

    根据您的回复,我猜您想要的内容与 al798 的答案非常接近,只需使用 WHERE 子句即可。

    SELECT *
      FROM TableA A1
      JOIN TableB B2 
        ON A1.Fname = B2.Fname 
       AND A1.Lname = B2.Lname 
       AND A1.City = B2.City
     WHERE A1.Fname = "First name of person"
       AND A1.Lname = "Last name of person"
       AND A1.City  = "the city";
    

    如果这不是您要查找的内容,请提供示例数据集并提供您期望的结果,因为您要查找的内容并不完全清楚。

    【讨论】:

    • 这两个表现在 100% 相同,我需要包含两个表中的字段。所以我认为我的 UNION 行不通。
    • 查看已编辑的评论。如果这不正确,请提供一个小样本数据集以及您希望从中获得的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多