MySQL不提供全面的加入,您可以使用
- 一對左+右和聯盟;或
- 使用左,右和內,UNION ALL
查詢也是非常錯誤的三元組,因爲你有一個GROUP BY但你的SELECT列不是聚集。
在您正確地將其轉換爲LEFT + RIGHT + UNION之後,仍然存在從每個不同of.merchantid
的任意隨機記錄獲取要約名和商家名的問題,甚至不一定來自同一記錄。
因爲你有一個INNER JOIN條件對o.merchant,充分JOIN是沒有必要的,因爲"offerorder"
記錄在"offer"
不匹配將失敗的INNER JOIN。這將它變成一個LEFT JOIN(可選)。由於您在of.merchantid
上進行分組,因此任何缺少的offerorder
記錄將作爲商家在「NULL」下分組在一起。
這是一個可以工作的查詢,對於每個商戶,它只顯示商家提供的一個商品(按照字典順序排序時的第一個商品)。
SELECT MIN(o.name) AS offername, m.name AS merchantName
FROM offer AS o
LEFT JOIN offerorder AS `of` ON `of`.offerId = o.id
INNER JOIN merchant AS m ON o.merchantId = m.id
GROUP BY `of`.merchantId, m.name
注意:加入o.merchantid = m.id
是高度懷疑。你的意思是of.merchantid = m.id
?如果是這種情況,請將LEFT更改爲RIGHT連接。
fundi =「中空器官的基部或距離其開口最遠的器官的部分」 – VoodooChild
MySQL不支持完整連接,請參閱http://stackoverflow.com/questions/2384298/mysql-full-outer -join-syntax-error/2384312#2384312 – BoltClock
+1 @VoodooChild我也被這個詞卡住了。 :P @BoltClock +1鏈接 – Nishant