PDA

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



s-soleimani
شنبه 04 بهمن 1393, 13:37 عصر
سلام
من دو جدول زیر رو دارم
127852

و جدو.ل 2
127853


کوئری لازم دارم که نتیجه زیر رو بهم بده
127855

sajadsobh
شنبه 04 بهمن 1393, 16:03 عصر
SELECT TB1.RID, TB1.Ucode, TB2.num
FROM TB1 INNER JOIN TB2 ON TB1.RID = TB2.RID

s-soleimani
شنبه 04 بهمن 1393, 16:23 عصر
SELECT TB1.RID, TB1.Ucode, TB2.num
FROM TB1 INNER JOIN TB2 ON TB1.RID = TB2.RID


قشنگ به صورت سوال دقت نکردید من همه ی رکوردهایی که rid یکسان دارن رو نمی خوام بلکه اگر از یک جدول سه رکورد rid 10004 داره و از جدول دیگه 5 رکورد rid 10004 داره inner join این دوتا میشه همه ی این رکورد ها در صورتی که اگر به صورت سوال دقت کنید من فقط آخرین رکورد از هر جدول رو میخوام که rid 10004 داره

SabaSabouhi
یک شنبه 05 بهمن 1393, 10:12 صبح
سلام
دوست من، پرسش رو کامل و صحیح مطرح کن تا جواب مناسب بگیری.
وقتی می‌گی «آخرین» یعنی چه؟ آخرین یعنی بر یک مبنایی ( که مشخص نکردین ) فهرست‌ها مرتب بشن.
از طرف دیگه جدول شما ناقص به نظر می‌رسه. چرا جدول شما Id نداره؟
اگر بخشی از جدول رو اینجا گذاشتی، به‌تره حداقل ستون‌های اصلی و مهم رو قید کنی.
و اگر جدول شما همین هست، به‌تره در طراحی جدول‌هاتون یه تجدید نظر کنی.

و اما انتخاب آخرین مورد رو معمولاً به صورت <SELECT Top 1 * FROM Table Order By DESC <column انجام می‌دن.
که حداقل چیزی که نیاز داریم اینه که بدونیم «آخرین» بر اساس کدام ستون سنجیده می‌شه.
اگه منظور آخرین رکورد وارد شده هست. نیاز به ستون Id که از جنس Identity هست داریم.


SELECT . . .
FROM ( SELECT Top 1 * FROM TB1 Order By Id DESC ) t1
JOIN TB2 t2 ON t2.RID = t1.RID

اگه دنبال اولین ستون بودین، نیازی به SORT و داشتن یک ستون برای مشخص کردن ترتیب نبود.
و به صورت SELECT Top 1 * FROM MyTable کارتون راه میافتاد، اما برای «آخرین» باید بدونیم بر اساس کدام ستون
باید مرتب کنیم.

صبا صبوحی

s-soleimani
یک شنبه 05 بهمن 1393, 10:51 صبح
سلام
دوست من، پرسش رو کامل و صحیح مطرح کن تا جواب مناسب بگیری.
وقتی می‌گی «آخرین» یعنی چه؟ آخرین یعنی بر یک مبنایی ( که مشخص نکردین ) فهرست‌ها مرتب بشن.
از طرف دیگه جدول شما ناقص به نظر می‌رسه. چرا جدول شما Id نداره؟
اگر بخشی از جدول رو اینجا گذاشتی، به‌تره حداقل ستون‌های اصلی و مهم رو قید کنی.
و اگر جدول شما همین هست، به‌تره در طراحی جدول‌هاتون یه تجدید نظر کنی.

و اما انتخاب آخرین مورد رو معمولاً به صورت <SELECT Top 1 * FROM Table Order By DESC <column انجام می‌دن.
که حداقل چیزی که نیاز داریم اینه که بدونیم «آخرین» بر اساس کدام ستون سنجیده می‌شه.
اگه منظور آخرین رکورد وارد شده هست. نیاز به ستون Id که از جنس Identity هست داریم.


SELECT . . .
FROM ( SELECT Top 1 * FROM TB1 Order By Id DESC ) t1
JOIN TB2 t2 ON t2.RID = t1.RID

اگه دنبال اولین ستون بودین، نیازی به SORT و داشتن یک ستون برای مشخص کردن ترتیب نبود.
و به صورت SELECT Top 1 * FROM MyTable کارتون راه میافتاد، اما برای «آخرین» باید بدونیم بر اساس کدام ستون
باید مرتب کنیم.

صبا صبوحی
سلام خیلی ممنون از راهنمایی شما
ولی من بالا گفتم که
فقط آخرین رکورد از هر جدول رو میخوام که rid 10004 داره یعنی بر اساس rid دیگهههههه!!!!

Felony
یک شنبه 05 بهمن 1393, 14:14 عصر
باید یک فیلد Identity برای مرتب سازی در نظر بگیرید ، یک فیلد ID به عنوان کلید اصلی به جدولتون اضافه کنید ، به صورت زیر هم میتونید کوئری تون رو بنویسید :


SELECT TOP 1
Table_1.UCode,
Table_2.Num
FROM Table_1
INNER JOIN Table_2 ON Table_1.RID = Table_2.RID WHERE Table_2.RID = 10004 order by Table_1.ID desc
یا

SELECT TOP 1
Table_1.UCode,
Table_2.Num
FROM Table_1
INNER JOIN Table_2 ON Table_1.RID = Table_2.RID WHERE Table_2.RID = 10004 AND Table_1.ID IN (SELECT MAX(ID) FROM Table_1 WHERE RID = 10004)

SabaSabouhi
یک شنبه 05 بهمن 1393, 14:37 عصر
سلام
من متوجه پرسش شما شده بودم، اما پرسش دیگری داشتم که پاسخش رو گرفتم.
دوست من، طراحی جدول در SQL فقط دانستن دستورات و یا استفاده از Management Studio نیست.
اگر اصول طراحی دیتابیس رو یاد نگیری، بدون شک به مشکلات زیادی می‌خوری که هم
وقتت رو خیلی میگیره و هم مشتری ازت ناراضی خواهد بود.

شما نمی‌تونی تو یه جدول کلیدی داشته باشی که یکتا نباشه.
چطور انتظار داری که من فرمان SORT BY RID رو بدم، و اون RID خاصی که مد نظر شما هست اول
یا آخر قرار بگیره در حالی که چند تا سطر با مقدار یکسان داری؟
Sql Server نرم‌افزار بسیار قدرتمندی هست. اما نمی‌تونه حدس بزنه که شما تو ذهنت چی داری.
باید اطلاعات کافی و مناسب بهش بدی تا جواب مناسب بهت بده.

صبا صبوحی