PDA

View Full Version : سوال: کوئری full join



numberone1
شنبه 27 تیر 1394, 13:38 عصر
سلام
من یک تیبل محصولات (product) دارم و هم چنین یک تیبل جزییات برای محصول (product_detail)
این کوئری رو اجرا میکنم ولی ارور برمیگردونه میگه بعد از ON فیلد آیدی وجود نداره!!


SELECT * FROM `product` FULL JOIN `product_detail` ON `product`.`id` = `product_detail`.`id` WHERE `product`.`id` = 21

لطفا راهنمایی کنید
ممنون

phpdev
شنبه 27 تیر 1394, 14:07 عصر
خوب باید هم ارور برگردونه اینو بزن ببین چی میگه

SELECT * FROM `product` FULL JOIN `product_detail` ON (`product`.`id` = `product_detail`.`id` AND `product`.`id` = 21)

یه سرم اینجا بزن

http://www.w3schools.com/sql/sql_join_full.asp

numberone1
یک شنبه 28 تیر 1394, 16:11 عصر
این ارور و برمیگردونه


Unknown column 'product.id' in 'on clause'

این کوئری رو هم دقیقا از روی همون آموزش نوشتم
فکر میکنم مشکل از ارتباط کلید های اصلی و خارجی باشه
تو تیبل product فیلد آیدی کلید اصلی هست
توی تیبل product_detail فیلد product_id کلید خارجی هست رفرنس فیلد id تیبل product
چجوری میشه بین این 2 تا join زد؟

SELECT * FROM `product` FULL JOIN `product_detail` ON (`product_detail`,`product_id` = `product`.`id` AND `product`.`id` = 21)

phpdev
یک شنبه 28 تیر 1394, 21:17 عصر
ببین اینجوری بزن :اشتباه:


SELECT * FROM `product` FULL JOIN `product_detail` ON (`product_detail`.`product_id` = `product`.`id` AND `product`.`id` = 21)


آخه این " , " چیه بین product_detail و product_id

numberone1
دوشنبه 29 تیر 1394, 11:52 صبح
ببین اینجوری بزن :اشتباه:


SELECT * FROM `product` FULL JOIN `product_detail` ON (`product_detail`.`product_id` = `product`.`id` AND `product`.`id` = 21)


آخه این " , " چیه بین product_detail و product_id

این ارور و برمیگردونه


#1054 - Unknown column 'product.id' in 'on clause'

Unique
دوشنبه 29 تیر 1394, 12:22 عصر
این علامت ` و پرانتز و از همه مهمتر full join نیاز نیست ، این باید جواب بده مگه اینکه واقعا شما فیلد id توی جدول product نداشته باشین.


select * from product t1 join product_detail t2 on t2.product_id = t1.id where t1.id = 21

t1 و t2 اینجا برای نامگذاری راحت تر و در واقع alias هستند.
اگه زمان نامگذاری جدول ها و فیلد ها منحصر به فرد عمل کنید نه به alias ها نیاز هست نه به کامل نوشتن اسم جدول ، مثلا اگه اول فیلد های product یک _p میگذازتیم و اول product_detail هم یک _pd حالا راحت مینوشتیم :


select * from product join product_detail on pd_product = p_id where p_id = 21

راستی انقدر وضع انجمن mysql خرابه که شما سوال هاتون را اینجا میپرسین ؟

680100
سه شنبه 30 تیر 1394, 09:31 صبح
سلام
مشکل شما از *هست که وقتی که خروجی میده چند id میده بیرون که تداخل پیش میاد
بهتر هست فیلد ها را ذکر کنید و از id AS idp استفاده کنید یعنی نام دیگری برای آی دی ها در نظر بگیری

phpdev
سه شنبه 30 تیر 1394, 09:53 صبح
جستجو کن ببین باید تعداد فیلد توی هر دو جدول باید یکسان باشه یا نه ؟ مثل union . آخه توی union باید اینجوری باشه حالا توی full join رو نمیدونم . امتحان کن:متفکر: