MySQL不提供完全连接,您可以使用
- 一对LEFT + RIGHT和UNIOn;或者
- 使用LEFT,RIGHT和INNER和UNIOn ALL的三元组
该查询也非常错误,因为您有GROUP BY,但是SELECt列不是聚合的。
将其正确转换为LEFT + RIGHT +
UNIOn后,仍然存在从每个随机记录的任何随机记录中获取要约名称和商人名称的问题,
of.merchantid甚至不一定从同一记录中获取要约名称和商人名称。
由于您对o.merchant拥有INNER JOIN条件,因此不需要FULL
JOIN,因为
"offerorder"没有匹配项的记录
"offer"将使INNER JOIN失败。这就变成了LEFT
JOIN(可选)。由于您要分组
of.merchantid,因此所有缺少的
offerorder记录都将在“ NULL”下作为商人ID分组在一起。
对于每个商人ID,这是一个查询,它将仅显示商人提出的一个要约(按字典顺序排序时具有名字的那个要约)。
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连接。



