PDA

View Full Version : Join براساس مقدار يك فيلد



Reza1607
یک شنبه 23 بهمن 1390, 22:16 عصر
سلام دوستان
من سه تا جدول دارم كه قرار بينشون join كنم خوب تا اين جا مشكلي ندارم اما join ايي كه مي خوام بكنم يك فرق داره و اونم اين كه قرار join براساس مقدار يك فيلد كه تو جدول اول هست انجام بدم

مثلا تو جدول اول اين اطلاعات هستش :
# tid id date
--------------------------
1 a 1 1390
2 b 2 1390
3 a 4 1390

جدول دوم :

# post user
----------------------------------
1 abc Reza
2 def Reza
3 jhi Ali
3 JKL Reza

جدول سوم :

# post
--------------------
1 HELLO
2 Test
3 Test


من ميخوام ركورد ها براساس فيلد tid جدول اول join بشن يعني اگر مقدار اين فيلد a بود اطلاعات براساس فيلد id جدول اول و فيلد # جدول دوم و اگر مقدار فيلد tid ، b بود براساس فيلد id جدول اول و فيلد # جدول سوم join بشه


نتيجه مثالي كه زدم بايد اين بشه

# post id
----------------------------------
1 1 abc
2 2 Test
3 4 JKL

امیـرحسین
یک شنبه 23 بهمن 1390, 22:50 عصر
اینو ببین:
SELECT tbl1.no, tb1.id, COALESCE(tbl2.post,tbl3.post) AS post FROM tb1
LEFT JOIN tbl2 ON tbl2.no=tb1.no AND tbl1.tid='a'
LEFT JOIN tbl3 ON tbl3.no=tb1.no AND tbl1.tid='b'
WHERE 1 GROUP BY tbl1.no;
الان JOIN با شرط اجرا میشه یعنی برای هر سطر یکی از JOINها مقدار داره پس بین tbl2.post و tbl3.post یکیشون حتما NULL هست که تابع COALESCE هم اولین مقدار غیر NULL رو برمیگردونه. در ضمن من بجای # از no استفاده کردم.

Reza1607
یک شنبه 23 بهمن 1390, 23:06 عصر
خوب حالا يه سوال ديگه
به نظر شما اين اصولي هستش كه بخواهيم جدول هام رو صورتي كه گفتم باشه يا بهتره جدا بشه؟
دليل اين كه من ميخوام جدولهام به اين صورت باشه اين كه مي خوام براساس زمان اطلاعات رو از چند جدول بيرون بكشم يه چيزي تو مايه هاي پروفايل تو فيس بوك

امیـرحسین
یک شنبه 23 بهمن 1390, 23:30 عصر
برای این سوال باید دیتابیس رو کامل دید. نمیشه کلی گفت.