PDA

View Full Version : سوال: سوال در مورد گرفتن یک query



saeidgab
سه شنبه 25 خرداد 1389, 12:46 عصر
سلام، دو تا جدول دارم که در جدول دوم فیلد کلید جدول اول رو همراه یک فیلد به نام Male از نوع Bit هم دارم. حالا میخوام یک query بگیرم و بگم برو همه رکوردای جدول اول رو که تمامی رکوردهای مرتبطش در جدول دوم فیلد Male یک است رو بیار، آیا این query رو میشه گرفت؟

Shahram_Shobeiri
سه شنبه 25 خرداد 1389, 12:58 عصر
select * from tab1 inner join tab2 on tab1.id = tab2.tab1_id where (tab2.male = 1)

saeidgab
سه شنبه 25 خرداد 1389, 13:17 عصر
ممنون از پاسخت ولی منظور من این نبود، میخوام بگم رکوردایی رو از جدول اول بیار که تمامی رکوردای مرتبطش در جدول دوم فیلد Male یکه. یعنی اگر در جدول اول 4 تا رکورد دارم برای هر کدوم از این چهار تا چک کن ببین در جدول دوم کدومشون تمامی رکورداش فیلد male یک است رو بیار.

محمد سلیم آبادی
سه شنبه 25 خرداد 1389, 15:37 عصر
SELECT *
FROM table_1 AS T
WHERE NOT EXISTS
(SELECT 1
FROM table_2
WHERE Male <> 1
AND T.ID = FK);

mehrpars
سه شنبه 25 خرداد 1389, 16:04 عصر
ممنون از پاسخت ولی منظور من این نبود، میخوام بگم رکوردایی رو از جدول اول بیار که تمامی رکوردای مرتبطش در جدول دوم فیلد Male یکه. یعنی اگر در جدول اول 4 تا رکورد دارم برای هر کدوم از این چهار تا چک کن ببین در جدول دوم کدومشون تمامی رکورداش فیلد male یک است رو بیار.


ویرایش شد ،آقای سلیم زودتر جوابو دادن:لبخندساده:

محمد سلیم آبادی
سه شنبه 25 خرداد 1389, 16:24 عصر
ویرایش شد ،آقای سلیم زودتر جوابو دادن:لبخندساده:

دوست من،
ممکنه راه حل های جایگزین بهتر و مناسب تری وجود داشته باشه پس شما می توانید یک راه حل بهتر پیشنهاد بدین. این اصلا مشکلی بوجود نخواهد آورد.

مثلا ممکنه این یک راه حل جایگزین مناسبتری باشه:

SELECT T.*
FROM table_1 AS T
INNER JOIN
(
SELECT FK
FROM table_2
GROUP BY FK
HAVING MAX(CASE WHEN Male <> 1 THEN 1 ELSE 0 END) = 0
) AS D
ON D.FK = T.ID;

mehrpars
سه شنبه 25 خرداد 1389, 16:29 عصر
دوست من،
ممکنه راه حل های جایگزین بهتر و مناسب تری وجود داشته باشه پس شما می توانید یک راه حل بهتر پیشنهاد بدین. این اصلا مشکلی بوجود نخواهد آورد.

مثلا ممکنه این یک راه حل جایگزین مناسبتری باشه:

SELECT T.*
FROM table_1 AS T
INNER JOIN
(
SELECT FK
FROM table_2
GROUP BY FK
HAVING MAX(CASE WHEN Male <> 1 THEN 1 ELSE 0 END) = 0
) AS D
ON D.FK = T.ID;

تواضعتون قابل تحسین هست ،
... منم از Not Exist استفاده کردم