与另一个表相比,如何查找表中的多余/不同行?

时间:2019-06-13 16:50:23

标签: sql database rows except

我试图在比较SQL Server中的两个表时找到多余或不同的行。

例如,#temp1具有5000行,而#temp2具有5125行。

我尝试做

class Program
{
    static void Main(string[] args)
    {
        HeaderNavigationMenu navigationMenu = new HeaderNavigationMenu();
        navigationMenu.DropdownMenu2SelectOption3();

        // The following code is an example of undesired capability; 
        // prefer if Home class could only be 
        // used by HeaderNavigationMenu class
        //Home home = new Home();
    }
}
public class HeaderNavigationMenu
{
    UsersMenu usersMenu;
    Home home;
    DropdownMenu2 dropdownMenu2;

    public HeaderNavigationMenu()
    {
        usersMenu = new UsersMenu();
        home = new Home();
        dropdownMenu2 = new DropdownMenu2();
    }

    public void DropdownMenu2SelectOption3()
    {
        dropdownMenu2.SelectOption3();
    }

    class UsersMenu
    {
    }

    class Home
    {
    }

    class DropdownMenu2
    {
        public void SelectOption3()
        {
        }
    }
}

但是它返回空结果。

所以我尝试了

SELECT * FROM #temp1
EXCEPT
SELECT * FROM #temp2

,这将返回5000行,这是#temp1中的行数,因此向我显示#temp2包含#temp1中存在的所有行,但它仅有125个额外的行。我正在尝试编写一个查询,仅显示#temp2中额外的125行。

3 个答案:

答案 0 :(得分:2)

您可以尝试

SELECT * 
FROM #table2 
WHERE NOT EXISTS 
    (SELECT * 
     FROM #table1 
     WHERE #table1.PK = #table2.PK)

SELECT *
FROM #table2 t1
LEFT JOIN #table2 t2 ON t2.PK = t1.PK
WHERE t2.PK IS NULL

这将适用于任何SQL数据库

答案 1 :(得分:1)

您的订单不正确

SELECT * FROM #temp2
EXCEPT
SELECT * FROM #temp1

答案 2 :(得分:1)

一种有趣的方式是:

customMethodSecurityMetadataSource

这仅显示不同的唯一行。它不会显示他们原来在哪个表中。