【问题标题】:Finding records in table 1 that do not exist in table 2 and returning all fields在表1中查找表2中不存在的记录并返回所有字段
【发布时间】:2013-03-22 12:51:12
【问题描述】:

我有两张这样的桌子

+------+-------+------+------+---------+
| NAME |SURNAME|DEPART| POST |EMPLOYEE#|
+------+-------+------+------+---------+
| JACK | LONDON| 111  |WRITER| 12345678|
|......|.......|......|......|.........|
+------+-------+------+------+---------+

+------+-------+------+------+---------+
| NAME |SURNAME|DEPART| POST |  LOGIN  |
+------+-------+------+------+---------+
| MARK | TWAIN | 222  |WRITER| MTWAIN  |
|......|.......|......|......|.........|
+------+-------+------+------+---------+

我需要在表1中找到表2中不存在的记录,并返回这些记录的所有字段。

我使用这样的代码...

SELECT name,depart FROM tb1 EXCEPT SELECT name,depart FROM table2

正如预期的那样,结果只有 2 个字段 NAME,DEPART。

【问题讨论】:

    标签: sql sql-server sql-server-2008 join


    【解决方案1】:

    基本上,您可以在此使用LEFT JOIN。当Table1 上的记录在Table2 上找不到任何匹配项时,Table2 上列的值的结果将为 NULL,因此要过滤掉不匹配的值,请添加检查 table2 上的 NULL 值的条件。

    SELECT  a.*
    FROM    Table1 a
            LEFT JOIN Table2 b
                ON a.name = b.name AND
                    a.depart = b.depart
    WHERE   b.Name IS NULL
    

    如需进一步了解联接,请访问以下链接:

    【讨论】:

    • 也许你的意思是 b.Name IS NULL ?
    • 你的意思是什么语法? :)
    • 有人编辑了我的帖子._。并修复语法和语言错误
    【解决方案2】:

    假设姓名、姓氏和出处足以唯一识别人员,请尝试:

    select t1.*
    from tb1 t1
    where not exists
    (select 1
     from table2 t2
     where t1.name = t2.name and 
           t1.surname = t2.surname and 
           t1.depart = t2.depart)
    

    【讨论】:

    • 顺便说一句,人不是独一无二的。 in corp 可以在部门 1 中工作 name1 surname1,在部门 2 中工作 name1 surname1。他们是不同的。但是,谢谢。
    【解决方案3】:
    select *
    from tb1
    minus
    select *
    from tb2
    

    【讨论】:

    • 请为您的解决方案添加更多解释。
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 2017-04-07
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多