PDA

View Full Version : سوال: سوال در خصوص SQL



rahro
چهارشنبه 16 بهمن 1387, 10:32 صبح
سلام
ميخواهم فرماني بنويسم و رکوردهايي رو از يک جدول استخراج کنم به شرط اينکه اون رکوردها در جدول ديگر در مورد يک فيلد اصلي مشابهي وجود نداشته باشد. آيا چنين چيزي ممکن است.؟!

saied_genius
چهارشنبه 16 بهمن 1387, 17:08 عصر
select [filed name] from [table1 name]
except
select [filed name] from [table2 name]


موفق باشيد.

rahro
پنج شنبه 17 بهمن 1387, 06:57 صبح
select [filed name] from [table1 name]
except
select [filed name] from [table2 name]
موفق باشيد.
سلام
ممنونم دوست عزیز ولی من این گزینه رو تو SQL فاکس ندیدم و مثال شما هم با مفهوم نبود .
فکر کنم این دستور فقط در خصوص اس کیو ال سرور کاربرد دارد.

binyaz2003
پنج شنبه 17 بهمن 1387, 10:16 صبح
اگر درست منظور شما رو متوجه شده باشم فرض کنيد دو تا جدول table1 و table2 داريد که ميخواهيد رکوردهاي جدول table1 رو بياريد با اين شرط که مثلا فيلد name که درهر دوتا هست مقاديري که در جدول 2 نيست و در 1 هست رو بياره :

SELECT * FROM table1 WHERE table1.name<>table2.name

saed2006
چهارشنبه 26 فروردین 1388, 10:24 صبح
من همین دستور تفریق رو که مینویسم این error »یگیرم:


Incorrect syntax near the keyword 'EXCEPT'.

saied_genius
چهارشنبه 26 فروردین 1388, 13:27 عصر
با عرض پوزش فراوان "EXCEPT" مربوط به SQL Server 2005 است.

saed2006
چهارشنبه 26 فروردین 1388, 21:58 عصر
پس دستور تفریق sql 2008 چیه؟

Esikhoob
چهارشنبه 26 فروردین 1388, 22:23 عصر
برای سئوال اولی یک چیزی شبیه به این:

SELECT * FROM table1 WHERE not( table1.field2=any(select field3 FROM table2))

saed2006
چهارشنبه 26 فروردین 1388, 22:59 عصر
ممنون به جهت پاسخت
اگر بخوام سه تا فیلد جدول یک رو با سه تا فیلد از جدول دو تفریق کنم چطور؟
یعنی مقایسه با سه تا فیلد انجام بشه
ممنون

saied_genius
چهارشنبه 26 فروردین 1388, 23:07 عصر
پس دستور تفریق sql 2008 چیه؟
در SQL SERVER 2008 هم همون EXCEPT است.

منظورم از 2005 ، 2005 به بعد بود.

saed2006
چهارشنبه 26 فروردین 1388, 23:09 عصر
ولی من خطایی که دادم رو دریافت میکنم!!!!!!



Incorrect syntax near the keyword 'EXCEPT'.

vbhamed
چهارشنبه 26 فروردین 1388, 23:26 عصر
سلام
ميخواهم فرماني بنويسم و رکوردهايي رو از يک جدول استخراج کنم به شرط اينکه اون رکوردها در جدول ديگر در مورد يک فيلد اصلي مشابهي وجود نداشته باشد. آيا چنين چيزي ممکن است.؟!


Select * From Tablel1 Where Id No in (Select Id From Table2)

saed2006
پنج شنبه 27 فروردین 1388, 09:27 صبح
سوال من اینه دستور تفریق SQL2008 چیست؟
اگر بخواهیم دو جدول رو با سه فیلد تفریق کینم چه باید بکنیم؟

saied_genius
پنج شنبه 27 فروردین 1388, 09:48 صبح
سوال من اینه دستور تفریق SQL2008 چیست؟
اگر بخواهیم دو جدول رو با سه فیلد تفریق کینم چه باید بکنیم؟


{ <query_specification> | ( <query_expression> ) }
{ EXCEPT | INTERSECT }
{ <query_specification> | ( <query_expression> ) }


Select * from Table1
EXCEPT
Select * from Table2

کاملاً جواب ميدهد.

(تعداد فيلد هاي هر دو table بايد به يک اندازه و از يک نوع باشند.)

saed2006
پنج شنبه 27 فروردین 1388, 12:18 عصر
من این


Select * from Table_1
EXCEPT
Select * from Table_2

دستور را بر دو جدول مشابه از نظر فیلد نوشتم و این
Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'EXCEPT'.
خطا را میگیرم!

Esikhoob
جمعه 28 فروردین 1388, 18:32 عصر
من با MS SQL SERVER کار نکرده ام ، ولی به نظر میرسد EXCEPT یک دستور خیلی خوب برای مقایسه دو table هست ... چیزی که VFP کم دارد ، در VFP تا آنجا که من میدانم با نوشتن select های طولانی (فرض کنید tableها 20 رکورد دارند که میخواهید در این مقایسه شرکت کنند)میشود به این قضیه دست یافت:
http://weblogs.sqlteam.com/jeffs/archive/2004/11/10/2737.aspx
طبق دستور العمل بالا باید اسم تمام فیلدها را در قسمت GROUP BY ببرید ، البته در قسمت نظریات پایین صفحه کس دیگری استفاده از EXIST را پیشنهاد داده که در آن حالت هم باید برای هر کدام از فیلدها یک شرط بنویسیم.
برای فهم مطلب لینک بالا باید چند نکته کلیدی را بدانید:
1- SELECT field1,field2 FROM table GROUP BY field1, field2 HAVING COUNT(*) >2
برای پیداکردن رکوردهای تکراری است.

2- UNION ALL دو table با تعداد فیلد عین هم را از پایین به هم میچسباند.

3- دو تا select را میتوان توهم دیگه قرار داد ، به شرطی که برای دومی alias در نظر بگیریم:
SELECT * FROM (SELECT * FROM table1) alias_name