PDA

View Full Version : درخواست راهنمایی برای نوشتن یک کوئری Select



amir-m
یک شنبه 14 اردیبهشت 1393, 19:47 عصر
سلام دوستان. مشکلم خیلی پیچیده به نظر نمیرسه اما خودم هرچی فکر کردم نتونستم راه حلی براش پیدا کنم :متفکر:
یه جدول دارم به شکل زیر:

http://upload7.ir/imgs/2014-05/70241737003961073524.gif

می خوام Personel_Code هایی که فاقد فرزند هستند را نمایش بدم (فاقد فرزند یعنی در ستون Relation برای اونها رکورد "فرزند" ثبت نشده) که در مثال بالا باید فقط کدپرسنلی 120 خروجی باشه.
چطور کوئری اش را بنویسم. ممنون میشم اگه راهنمایی کنید

Mahmoud.Afrad
یک شنبه 14 اردیبهشت 1393, 20:35 عصر
یک راه حذف کسانیه که فرزند دارند. در اینصورت کسانی که فرزند ندارند باقی می مانند.

select TBL.Personel_Code
from TBL
except
select TBL.Personel_Code
from TBL
where TBL.Relation = N'فرزند'

DataMaster
دوشنبه 15 اردیبهشت 1393, 08:21 صبح
البته یه راه خیلی الکی که میتونی استفاده کنی اینه که تعداد رکورد اون آی دی که فرزند نداره کوچکتر مساوی 2 هست
select Personnel_Code From tbl
Group By Personnel_Code
Having Count(Personnel_Code) <=2

amir-m
سه شنبه 16 اردیبهشت 1393, 19:05 عصر
البته یه راه خیلی الکی که میتونی استفاده کنی اینه که تعداد رکورد اون آی دی که فرزند نداره کوچکتر مساوی 2 هست
select Personnel_Code From tbl
Group By Personnel_Code
Having Count(Personnel_Code) <=2

نه. معلوم نیست چندتا رکورد فرزند ثبت شده باشه. جدول بالا یه مثاله. ممکنه برای یه کد پرسنلی 4 تا رکورد فرزند ثبت شده باشه

rezayeman
چهارشنبه 17 اردیبهشت 1393, 10:40 صبح
اینو امتحان کن

select personel-code
from tbl
where personel-code not exists (select personel-code from
tbl
where relation = 'فرزند')

Mahmoud.Afrad
پنج شنبه 18 اردیبهشت 1393, 14:37 عصر
البته یه راه خیلی الکی که میتونی استفاده کنی اینه که تعداد رکورد اون آی دی که فرزند نداره کوچکتر مساوی 2 هست
select Personnel_Code From tbl
Group By Personnel_Code
Having Count(Personnel_Code) <=2

ممکنه برای یک شخص پدر و فرزند ثبت شده باشه پس صرفا تعداد گروه نمیتونه جواب رو ارائه بده.

zidane
شنبه 20 اردیبهشت 1393, 09:46 صبح
SELECT DISTINCT personel_code
FROM family_table
WHERE (NOT (personel_code IN
(SELECT DISTINCT personel_code
FROM family_table
WHERE relation = 'فرزند')))

Mojtaba.Shateri
شنبه 20 اردیبهشت 1393, 10:08 صبح
سلام دوستان. مشکلم خیلی پیچیده به نظر نمیرسه اما خودم هرچی فکر کردم نتونستم راه حلی براش پیدا کنم :متفکر:
یه جدول دارم به شکل زیر:

http://upload7.ir/imgs/2014-05/70241737003961073524.gif

می خوام Personel_Code هایی که فاقد فرزند هستند را نمایش بدم (فاقد فرزند یعنی در ستون Relation برای اونها رکورد "فرزند" ثبت نشده) که در مثال بالا باید فقط کدپرسنلی 120 خروجی باشه.
چطور کوئری اش را بنویسم. ممنون میشم اگه راهنمایی کنید

SELECT Personel_Code
FROM Family_T
WHERE Personel_Code NOT IN (SELECT DISTINCT Personel_Code
FROM Family_T
WHERE Relation LIKE N'فرزند')

Mojtaba.Shateri
شنبه 20 اردیبهشت 1393, 10:12 صبح
سلام دوستان. مشکلم خیلی پیچیده به نظر نمیرسه اما خودم هرچی فکر کردم نتونستم راه حلی براش پیدا کنم :متفکر:
یه جدول دارم به شکل زیر:

http://upload7.ir/imgs/2014-05/70241737003961073524.gif

می خوام Personel_Code هایی که فاقد فرزند هستند را نمایش بدم (فاقد فرزند یعنی در ستون Relation برای اونها رکورد "فرزند" ثبت نشده) که در مثال بالا باید فقط کدپرسنلی 120 خروجی باشه.
چطور کوئری اش را بنویسم. ممنون میشم اگه راهنمایی کنید

SELECT Personel_Code
FROM Family_T
WHERE Personel_Code NOT IN (SELECT DISTINCT Personel_Code
FROM Family_T
WHERE Relation LIKE N'فرزند')

البته در SQL توصیه به اسفاده از DISTINCT نمیشه. برای همین میتونید از GROUP BY بجای آن استفاده کنید :
SELECT Personel_Code
FROM Family_T
WHERE Personel_Code NOT IN (SELECT Personel_Code
FROM Family_T
WHERE Relation LIKE N'فرزند'
GROUP BY Personel_Code)