訂單表:order
訂單商品表:order_goods
也就是order_goods裡存放著order裡每個訂單裡的所有商品資訊;
我需要找出合格訂單裡有哪些商品怎麼來寫?
如:我要尋找訂單表內order_no等於20160804164336873986的訂單,並且order與order_goods裡所有欄位都列出來。
回複內容:
訂單表:order
訂單商品表:order_goods
也就是order_goods裡存放著order裡每個訂單裡的所有商品資訊;
我需要找出合格訂單裡有哪些商品怎麼來寫?
如:我要尋找訂單表內order_no等於20160804164336873986的訂單,並且order與order_goods裡所有欄位都列出來。
order_goods對於一個order_id有多個記錄因此以order_goods左連order查詢,串連查詢語句執行效率不高得最佳化下
SELECT * FROM order_goods og LEFT JOIN order o ON o.id=og.order_id
SELECT * FROM order a JOIN IN order_goods b ON a.id=b.order_id WHERE a.order_no='20160804164336873986'大概是這樣,不知道寫錯沒有
一對多,關聯模型
看了樓上幾位的回答,應該可以滿足題主的要求了。對於有強迫症的我,我必須要說一下,題主查詢的時候一定不要用*號,欄位有多少就都寫出來,欄位名一樣的重新命名。
建議不要用join了,拆分成兩個查詢;另外盡量不要用SELECT *
我也有點強迫症了,最近一直接觸索引,一看到mysql就想到索引,我想問下要查詢的條件欄位建立索引了嗎?
還有看到上面的回答,先查詢出order表中的資料,再用迴圈去查詢每個的編號id對應的order_goods表中的資料,這樣分開查詢不會瞬間讓mysql卡死(當然了這些是資料量特別大的時候會看出來,資料量少的話用left join我也不說啥)
多表查詢。關聯
select * from order,order_goodswhere order.id = order_goods.order_idand order.id = '20160804164336873986';select * form order inner join order_goods on order.id = order_goods.order_idwhere order.id = '20160804164336873986';
上面兩種寫法都是一樣的,實現的是2個表串連.
3個表串連的寫法也類似,比如查詢ID為1的學生的課程和成績:
SELECT * FROM `student`, `score`, `course`WHERE `student`.`id` = `score`.`student_id` AND `score`.`course_id` = `course`.`id`AND `student`.`id` = 1;SELECT * FROM `student` INNER JOIN `score` ON `score`.`student_id` = `student`.`id` INNER JOIN `course` ON `course`.`id` = `score`.`course_id` WHERE `student`.`id` = 1;