我试图在比较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行。
答案 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
这仅显示不同的唯一行。它不会显示他们原来在哪个表中。