PDA

View Full Version : یه سوال در مورد نوشتن SQL



nasr
پنج شنبه 07 اسفند 1382, 19:56 عصر
سلام
من دوتا جدول دارم که یکی شامل کد فرد و اسم و فامیل است و دیگری شامل کدفرد و شماره تلفن آن است
مثل زیر
1 علی جوادی
2 محمد محمدی
3 محسن موسوی
4 رضا علوی
5 محمود نصیری
و جدول دومی شامل
1 12345678
3 1011121
5 64546546
حالا یک Query می خوام که جدول زیر را به من بده
1 علی جوادی 12345678
2 محمد محمدی
3 محسن موسوی 1011121
4 رضا علوی
5 محمود نصیری 6454656
یعنی همه رکورد های جدول اول را نشان بده و از جدول دومی هر کدام شماره تلفن دارن اون را هم نشون بده و اگه ندارند فیلدش خالی باشه
ممنونم

jirjirakk
پنج شنبه 07 اسفند 1382, 23:04 عصر
Select * from X1,X2 Where X1.code = X2.Code

parhizkar2000
پنج شنبه 07 اسفند 1382, 23:18 عصر
جدول اولی = aza جدول دومی=book

SELECT DISTINCT Aza.NAME, Aza.FAMILY, Book.NAME, Book.CODE, Book.AMAN_G, Book.TAR_BAZ, Book.TAR_AM, Aza.NUM_PER
FROM "Aza.dbf" Aza, "BOOK.DBF" Book
WHERE Aza.NUM_PER = Book.AMAN_G
ORDER BY Aza.FAMILY, Aza
.NAME
فیلد مشترک aman_g از جدولaza,num_per از جدول book
این مثال که خودم تو برنامه از استفاده کردم

nasr
جمعه 08 اسفند 1382, 00:50 صبح
از جوابهایتان ممنونم

هردو مورد را انجام دادم

ولی در هر دومورد فقط رکوردهایی را نشون می ده که شماره تلفن دارند البته این بخاطر عنوان Where است که در کد وجود داره ما نباید شرط مساوی بودن دو کد را برای اون بگذاریم

ممنونم اگه جواب سوال من را بدید

moradi_am
جمعه 08 اسفند 1382, 09:18 صبح
در جدول تلفنها باید حداقل کد افرادی که تلفن ندارند وارد بشه والا از کجا بیاره ؟.یعنی هربار در جدول اول کد و نام و... را وارد میکنید یک رکورد در جدول دومی ایجاد کرده و فقط کد را در آن وارد کنید .

spicirmkh
جمعه 08 اسفند 1382, 09:42 صبح
سلام

شما مجبور هستید برای کلیه افراد در جدول دفتر تلفن یک کد داشنه باشید حتی اگر تلفن نداشته باشد.
sql چون شرط یک به یک انجام مدهد می اورد یعنی توی شرط می گوید کسانی که دفتر تلفن دارد یا ندارد
هر دو شرط نمی شود که هم داشته باشد هم نداشته باشد
:wink:
با تشکر

SReza1
یک شنبه 10 اسفند 1382, 00:06 صبح
میتونی از outer join استفاده کنی اینطوری

Select Name,Family,Tel From TablePer
outre join TabelTel On TabelTel.Code = TablePer.Code

nasr
دوشنبه 11 اسفند 1382, 17:33 عصر
این کار راهم کردم یه Error می ده با عنوان

Syntax Erro in FROM clause

baabi
سه شنبه 12 اسفند 1382, 15:04 عصر
میتونی از Union استفاده کنی یعنی بعد از نوشتن دستورات بالا و نوشتن Union دقیقا همون دستورات رو با شرط مخالف در پایین بنویسی

SReza1
چهارشنبه 13 اسفند 1382, 19:51 عصر
با استفاده از دستورات join اینکار انجام میشه! اینو من الان تست کردم فقط یادم رفت Left رو بگذارم
این کار را بکن اگه از SQL Server 2000 استفاده میکنی حتما جواب میده
استفاده از union اصلا جالب نیست و در این مورد هم کاربری هم نداره چون جداوا از جنس هم نیستند پس جواب نمیده
و اینم Query که گفتم و تست کردم درسته(جدول تلفن بنام TaTel با فیلد Code,Tel و جدول TaPersonel با فیلد Code,Name,Family میباشد)


Select TaPersonel.Code,Name,Family,Tel From TaPersonel
Left outer join TaTel On TaTel.Code = TaPErsonel.Code

خروجی :

1 سیدرضا داودی 8888888
2 سیدمحمد داودی 7777777
3 علی مختاری 6666666
4 عباس تهرانی 5555555
5 شیروانی سعید NULL


میبنی که آقا سعید تلفن نداره! :wink:

nasr
سه شنبه 01 اردیبهشت 1383, 15:01 عصر
سلام

مشکل من با این کد حل شد و دقیقا همون کاری که می خوام را انجام می ده ولی این کوری

برای رکوردهای زیاد خیلی طول می کشه تا Active برابر True بشه

رکوردهای من حدود 60000 رکورد است و حدود 50 ثانیه طول می کشه تا Active اون True بشه

آیا راهی بهتر وجود داره یا باید با اون کنار بیام

ممنون

amirrf
چهارشنبه 02 اردیبهشت 1383, 10:59 صبح
سلام،

روی فیلد کد در هر دو جدول ایندکس تعریف کنید اگر ندارد (و اگر کلید اصلی نیستند الان).

دیتابیس و تکنولوژی اتصال شما چیه؟

با 60000 رکورد روی اینتربیس، Active شدن یک SQLQuery یا IBQuery فقط 10 میلی ثانیه طول می کشه، و خواندن تمام رکوردها درون یک کلاینت دیتاست 13 ثانیه و برای IBQuery خواندن تا آخرین رکورد 11 ثانیه.

nasr
چهارشنبه 02 اردیبهشت 1383, 13:39 عصر
دیتابیس من از نوع DBISAM است

در یکی از همین تاپیکها خوندم که یکی از مشکلات DBIsam همین Join می باشد

البته 60000 رکورد هم حجمی تقریبا 100 مگا بایت دارد آیا باز فرمایشات شما در این مورد هم صدق می کند

ممنون

vahab_vb
پنج شنبه 26 مرداد 1385, 16:55 عصر
بنده اطلاعات چندانی از دیتابیسها ندارم.
ولی وقتی داخل تاپیک شما بدنبال علت بوجود اومدن کد خطای زیر میگشتم :



Syntax Erro in FROM clause


بر حسب تجربه متوجه شدم که دلیل اینکه این پیغام خطا به بنده داده شده بود. این بود که اسم یکی از table هام رو order گذاشته بودم.
در نتیجه اون رو بصورت اتفاقی تغییر نام دادم. دیدم که در نهایت مشکل بنده حل شد.
اینو گفتم تا اگر کسی همچین مشکلی داشت. این روش رو هم امتحان کنه.
که شاید برای دیگران هم مفید واقع بشه.
ممنون

V60
شنبه 14 بهمن 1385, 18:50 عصر
کاربر گرامی Sreza1
از جوابتان بسیار سپاس گذارم
حالا من یک سوال دیگر دارم
اگر من 3 یا چهار جدول داشته باشم که مثل همین مثال باشد یعنی یک طرف اسم و طرف دیگر شماره تلفن در یک جدول ، شماره تلفن محل کار در جدول دیگر و شماره تلفن همراه در جدول چهارم باشد ، حال باید چه کار کرد که این مشکل برطرف بشود

V60
شنبه 14 بهمن 1385, 23:17 عصر
متشکر از دوستان خودم جوابش را از تو راهنمای اکسس پیدا کردم


from search inner join (sabtename left join sanad on sanad.id=sabtename.id) on search.id=sabtename.id