PDA

View Full Version : درخواست یک دستور select خاص



ghasemweb
سه شنبه 03 اسفند 1389, 00:45 صبح
سلام من دو تا جدول تو بانک دارم که دوتاش هم یکیه یعنی فیلداش اینه id,name,famili حالا یه سری رکوردها توشون ریخته شده که تقریبا رکورداشون یکیه ولی میخوام این دوتا جدول رو یکی کنم مثلا یه سری رکورد تو هر دوتاش هست یعنی مشترکه ولی بعضی رکوردها تو جدول 1 هست که تو جدول 2 نیست و برعکس. حالا چطوری میتونم هر دو رو همسان کنم.
امیدوارم منظورمو خوب رسونده باشم !!!

Reza_Yarahmadi
سه شنبه 03 اسفند 1389, 09:30 صبح
روشهاي زيادي براي اين كار وجود داره ، با چه حجم داده اي داريد كار ميكنيد؟
ساده ترين روش ميتونه بصورت زير باشه

With Table1 as (
Select 1 as Id, 'Data 1' as Name
UNION ALL
Select 2 as Id, 'Data 2' as Name
UNION ALL
Select 5 as Id, 'Data 5' as Name
UNION ALL
Select 6 as Id, 'Data 6' as Name
UNION ALL
Select 7 as Id, 'Data 7' as Name
), Table2 as (
Select 1 as Id, 'Data 1' as Name
UNION ALL
Select 2 as Id, 'Data 2' as Name
UNION ALL
Select 3 as Id, 'Data 3' as Name
UNION ALL
Select 4 as Id, 'Data 4' as Name
UNION ALL
Select 5 as Id, 'Data 5' as Name
), res as(
Select * From Table1
UNION ALL
Select * From Table2)
Select Distinct * From res

ghasemweb
سه شنبه 03 اسفند 1389, 17:17 عصر
ممنون دوست عزیز من فعلا کد شما رو تست نکردم امیدوارم جواب بده اگه زحمتی نیست یه توضیح مختصر هم بده که بهره کامل ببریم. در ضمن حجم هم بالا نیست تقریبا تو هر جدول 1000 رکورد.

Reza_Yarahmadi
سه شنبه 03 اسفند 1389, 21:30 عصر
اول اینکه کد بالا رو بصورت زیر اصلاح کنید.

With Table1 as (
Select 1 as Id, 'Data 1' as Name
UNION ALL
Select 2 as Id, 'Data 2' as Name
UNION ALL
Select 5 as Id, 'Data 5' as Name
UNION ALL
Select 6 as Id, 'Data 6' as Name
UNION ALL
Select 7 as Id, 'Data 7' as Name
), Table2 as (
Select 1 as Id, 'Data 1' as Name
UNION ALL
Select 2 as Id, 'Data 2' as Name
UNION ALL
Select 3 as Id, 'Data 3' as Name
UNION ALL
Select 4 as Id, 'Data 4' as Name
UNION ALL
Select 5 as Id, 'Data 5' as Name
), res as(
Select * From Table1
UNION
Select * From Table2)
Select * From res
توضیح خاصی نداره ، 2 جدول مجازی اول Table1 و Table2 برای شبیه سازی 2 جدول شما به کار رفته (نیازی نیست شما اینها رو بنویسید). بعدش 2 جدول با هم Union شدند. این دستور رکوردهای 2 جدول رو کنار هم میذاره و در صورتیکه رکوردی در هر 2 جدول وجود داشته باشه یکیشون رو نشون میده.(UNION ALL هیچ رکوردی رو حذف نمیکنه و همه چیز رو نمایش میده). این روش فقط برای نمایش مجموع رکوردها کاربرد داره.
برای آپدیت کردن جدولهاتون هم هر رکوردی که در جدول2 وجود داره ولی در جدول1 وجود نداره رو به جدول1 اضافه کنید.

Insert Into Table1
Select
*
From
Table2 t2
Where
NOT EXISTS(
Select
*
From Table1 t1
Where
t1.Field1 = t2.Field1
AND
t1.Field2 = t2.Field2
AND
t1.Field3 = t2.Field3
AND
t1.Field4 = t2.Field4)