訂單表: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查詢,連接查詢語句執行效率不高得優化下
<code>SELECT * FROM order_goods og LEFT JOIN order o ON o.id=og.order_id</code>
<code>SELECT * FROM order a JOIN IN order_goods b ON a.id=b.order_id WHERE a.order_no='20160804164336873986' 大概是这样,不知道写错没有</code>
一對多,關聯模型
看了樓上幾位的回答,應該可以滿足題主的要求了。對於有強迫症的我,我必須要說一下,題主查詢的時候一定不要用*
號,字段有多少就都寫出來,字段名一樣的重命名。
建議不要用join了,分成兩個查詢;另外盡量不要用SELECT *
我也有點強迫症了,最近一直接觸索引,一看到mysql就想到索引,我想問下要查詢的條件字段創建索引了嗎?
還有看到上面的回答,先查詢出order表中的數據,再用循環去查詢每個的編號id對應的order_goods表中的數據,這樣分開查詢不會瞬間讓mysql卡死(當然了這些是數據量特別大的時候會看出來,數據量少的話用left join我也不說啥)
多表查詢。關聯
<code>select * from order,order_goods where order.id = order_goods.order_id and order.id = '20160804164336873986'; select * form order inner join order_goods on order.id = order_goods.order_id where order.id = '20160804164336873986';</code>
上面兩種寫法都是一樣的,實現的是2個表連接.
3個表連接的寫法也類似,比如查詢ID為1的學生的課程和成績:
<code>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;</code>