【问题标题】:Join two Tables, ignore records from first table if exists in second加入两个表,如果第二个表中存在则忽略第一个表中的记录
【发布时间】:2011-01-21 18:54:47
【问题描述】:

如果我只想从第二个表中获取记录,如何加入表?如果不存在第二个,则记录第一个表的。

Table A         Table B         Result
pid,name,type   pid,name,type   pid,name,type
1,Anna,null     1,Anna,100      "1,Anna,100"
2,Bea,null      -               "2,Bea,Null"
3,Caro,null     3,Caro,100      "3,Caro,100"    
                3,Caro,200      "3,Caro,200"

编辑:我试图改进我的示例表。

【问题讨论】:

  • 你想知道什么一点都不清楚。你的A列和B列是什么?在您的示例中,A 的记录在什么意义上被忽略了?
  • 你会在 A 表中有 Caro,在 B 表中没有行吗?
  • 人员要么是组的一部分,要么是组的成员。他们可能在一个组中有多个成员资格。现在,我需要一个与组关联的所有人员的列表。但同一个人只有多个会员资格。

标签: sql-server join


【解决方案1】:
SELECT
   ISNULL(A.column1, B.column1),  --perhaps name
   ISNULL(A.column2, B.column2)  --perhaps id
FROM
   TableA A
   FULL OUTER JOIN
   TableB B ON A.column1 = B.column1  --assume name is matching column

编辑,我假设您在 tableA 中没有行,而在 tableB 中没有“Dave,6”。否则,Cyber​​nate 的左连接就足够了

【讨论】:

  • 不是我所需要的,但你让我走上了正确的道路。谢谢!
【解决方案2】:

你可以使用Left Join,我假设TableB的列名分别是Name和ID。

SELECT tableA.Name, tableB.Id
  FROM tableA LEFT JOIN tableB
    ON tableA.Name = tableB.Name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多