برگزیده های پرشین تولز

سوال درمورد یک کوئری دیتابیس اکسس

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
سلام!

من سر ساخت این کوئری کلافه شدم، اصلا امکان داره در اکسس این کا رو کرد؟

یک کوئری SELECT میخوام که اگر یک مقدار مشخصی با WHERE یا INNER JOIN در یک تیبل سوال شد، در برگشت در صورت وجودش yes یا no برگردونه.

توی اکسس امکان پذیره؟
مثلا برگشت SELECT * FROM product WHERE product_id=123 به جای برگشت یک لیست، yes و no باشه. این خودش INNER JOIN میشه، یعنی از تیبلهای دیگه هم من اطلاعات لیست می کنم ولی از این تیبل اگر با اون id وجود داشته باشه باید yes و در صورت عدم وجود no بده! :wacko: کمک! :(

تشکر.
 

Parham

Registered User
تاریخ عضویت
24 سپتامبر 2003
نوشته‌ها
1,042
لایک‌ها
2
این که خیلی راحته:
SELECT "Yes" FROM product WHERE product_id=123

اگر که شرط برقرار باشه و رکوردی با اون شرایط وجود داشته باشه Yes رو بر میگردونه و اگر هم که هیچی برنگردونه یعنی که No
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
به نقل از Parham.G :
این که خیلی راحته:
SELECT "Yes" FROM product WHERE product_id=123

اگر که شرط برقرار باشه و رکوردی با اون شرایط وجود داشته باشه Yes رو بر میگردونه و اگر هم که هیچی برنگردونه یعنی که No
چه شکلی توی یک INNER JOIN بیارمش؟
مثلا:
SELECT a.name, b.product_name,a.id2 FROM addr as a INNER JOIN products as b ON a.id=b.id

می خوام اگر a.id2 در تیبل b بودش yes برگردونه وگرنه (اگر شد) no.
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
من 3 تا تیبل دارم: APP, OLD, MASTER

در APP یکسری فیلد هست، ولی اصل کاری PARTNO خواهد بود. در MASTER فقط همین یک فیلد هست (PARTNO)، و در OLD هم یکسری فیلد و البته PARTNO.

من باید اینها رو JOIN کنم و از PARTNO می تونم استفاده کنم. باید بطور مثال field1 , field2 رو از APP و field3 رو از OLD بگیرم و yes/no از MASTER در صورتی که اون PARTNO در MASTER باشه.

یعنی بدون این مشکل yes/no این خواهد بود:
کد:
SELECT a.PARTNO, a.field1, a.field2, b.field3 FROM APP as a INNER JOIN OLD as b ON a.PARTNO=b.PARTNO WHERE a.PARTNO LIKE'%123%'

حالا چه JOINی به این اضافه کنم که اگر PARTNO در MASTER وجود داشت یک ستون برگردونه yes و اگر نه برگردونه no یا هیچی بر نگردونه؟

(یک رکورد بر نمی گرده، شاید چندتا برگرده)
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
164.gif
 

Parham

Registered User
تاریخ عضویت
24 سپتامبر 2003
نوشته‌ها
1,042
لایک‌ها
2
به نظر پیچیده میاد ولی:
کد:
SELECT a.PARTNO, a.field1, a.field2, b.field3,(SELECT "Yes" FROM MASTER WHERE MASTER.PARTNO = a.PARTNO) AS Result FROM APP as a INNER JOIN OLD as b ON a.PARTNO=b.PARTNO WHERE a.PARTNO LIKE'%123%'
:D
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
دقیقا یک همچین چیزی باید باشه. ولی من این اررور رو ازش گرفتم:
At most one record can be returned by this subquery.

یعنی مشکل از کجاست؟
 

Parham

Registered User
تاریخ عضویت
24 سپتامبر 2003
نوشته‌ها
1,042
لایک‌ها
2
کجا این ارور رو میگیری؟ تو خود اکسس کار میکنی؟
میتونی اون سه تا جدول رو با اطلاعات نمونه بزاری تست کنم؟ چون من چند تا جدول با همون ساختار تو اکسس ساختم و تست کردم.
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
به نقل از Parham.G :
کجا این ارور رو میگیری؟ تو خود اکسس کار میکنی؟
میتونی اون سه تا جدول رو با اطلاعات نمونه بزاری تست کنم؟ چون من چند تا جدول با همون ساختار تو اکسس ساختم و تست کردم.
اتچش کردم. البته برنامه رو توی وی بی می نویسم ولی خودت می تونی query1 رو تست کنی. نمی دونم مشکلش چیه!

تشکر
 

hamidch56

کاربر تازه وارد
تاریخ عضویت
25 نوامبر 2005
نوشته‌ها
26
لایک‌ها
0
با سلام

اگه درست متوجه مشکل شما شده باشم شما باید برای اینکار یک Modules بنویسید بر اساس شرطی که

گذاشته اید :)
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
به نقل از hamidch56 :
با سلام

اگه درست متوجه مشکل شما شده باشم شما باید برای اینکار یک Modules بنویسید بر اساس شرطی که

گذاشته اید :)
من در نهایت باید اینرو به یه DataGrid در وی بی bind کنم. نمی خوام در اکسس ازش استفاده کنم. منظورتون از ماجول نوشتن کد ویبی بود؟ در این صورت از یک مرحله bind کردن بیشتر میشه.

تشکر
 

Parham

Registered User
تاریخ عضویت
24 سپتامبر 2003
نوشته‌ها
1,042
لایک‌ها
2
درسته چون اون ساب کوئری برای جدولهای شما چند تا رکورد برمیگردوند مشکل پیش میومد. با یک TOP 1 مشکل برطرف میشه:
کد:
SELECT (SELECT TOP 1 "Yes"  FROM MASTER WHERE MASTER.PARTNO = a.PARTNO) AS exp1, a.PARTNO, b.STOCK, b.DESCRIP
FROM APP AS a INNER JOIN OLD AS b ON a.PARTNO=b.PARTNO;
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
به نقل از Parham.G :
درسته چون اون ساب کوئری برای جدولهای شما چند تا رکورد برمیگردوند مشکل پیش میومد. با یک TOP 1 مشکل برطرف میشه:
کد:
SELECT (SELECT TOP 1 "Yes"  FROM MASTER WHERE MASTER.PARTNO = a.PARTNO) AS exp1, a.PARTNO, b.STOCK, b.DESCRIP
FROM APP AS a INNER JOIN OLD AS b ON a.PARTNO=b.PARTNO;
مرسی! :lol:
مشکلم رو حل کردی.
8.gif

واقعا متشکرم، خیلی گیرش بود، امیدوارم بتونم جبران کنم. :)

تشکر
 
بالا