اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
گاهی از اوقات یک سری از امکانات جدید در دسترس هستند اما فراموش میشوند. برای مثال روش یافتن رکوردهای غیر یکسان دو جدول یکسان. مثلا یک دیتابیس قدیمی دارید دقیقا مشابه دیتابیس کاری فعلی با همان ساختار (ری استور شده از یک بک آپ). اکنون میخواهید بدانید در طول این مدت چه رکوردهایی به دیتابیس کاری اضافه شده که در دیتابیس قدیمی ری استور شده موجود نیست و کلا کدام رکوردها با هم متفاوتند. چه باید کرد؟
مثال:
دو جدول موقتی یکسان زیر را در نظر بگیرید.
CREATE TABLE #tableA
(
column1 INT,
column2 INT
)
INSERT INTO #tableA
VALUES
(1,1)
,(1, 2)
,(1, 3)
,(2, 1)
SELECT column1,
column2
FROM #tableA
CREATE TABLE #tableB
(
column1 INT,
column2 INT
)
INSERT INTO #tableB
VALUES
(1,1)
,(1, 3)
,(2, 2)
SELECT column1,
column2
FROM #tableB
یک سری دیتای دلخواه به آنها اضافه شده است. (از روش اضافه کردن چندین رکورد توسط یک عبارت insert که در اس کیوال سرور 2008 معرفی شده، استفاده گردیده است)
#tableA
column1 column2
----------- -----------
1 1
1 2
1 3
2 1
#tableB
column1 column2
----------- -----------
1 1
1 3
2 2
اکنون میخواهیم رکوردهایی از جدول A را که در جدول B نیستند، پیدا کنیم. روش متداول انجام اینکار در اس کیوال سرور 2000 به صورت زیر است:
SELECT column1,
column2
FROM #tableA
WHERE NOT EXISTS (
SELECT *
FROM #tableB
WHERE #tableA.column1 = #tableB.column1
AND #tableA.column2 = #tableB.column2
)
column1 column2
----------- -----------
1 2
2 1
SELECT column1, column2 FROM #tableA
EXCEPT
SELECT column1, column2 FROM #tableB
column1 column2
----------- -----------
1 2
2 1
در این حالت تعداد ستونهای در نظر گرفته شده برای مقایسه باید یکسان و یک نوع باشند.
همچنین اگر میخواهید رکوردهایی از جدول A را که در جدول B وجود دارند بیابید، میتوان از intersect استفاده کرد.