Оператор Mysql (синтаксическая ошибка при FULL JOIN)

Что не так с моим заявлением sql, он говорит, что проблема находится рядом с FULL JOIN, но я в тупике:

SELECT `o`.`name` AS `offername`, `m`.`name` AS `merchantName` FROM `offer` AS `o` FULL JOIN `offerorder` AS `of` ON of.offerId = o.id INNER JOIN `merchant` AS `m` ON o.merchantId = m.id GROUP BY `of`.`merchantId` 

Пожалуйста, будьте осторожны, поскольку я не являюсь sql fundi

MySQL не предлагает полного соединения, вы можете использовать

  • пара LEFT + RIGHT и UNION; или
  • используйте триплет LEFT, RIGHT и INNER и UNION ALL

Запрос также очень неправильный, потому что у вас есть GROUP BY, но ваши столбцы SELECT не являются агрегатами.

После правильного преобразования этого параметра в LEFT + RIGHT + UNION у вас по-прежнему возникает проблема получения имени предложения и имени продавца из любой случайной записи на каждый отдельный of.merchantid и даже не обязательно из одной записи.

Поскольку у вас есть условие INNER JOIN против o.merchant, FULL JOIN не требуется, так "offerorder" записи "offerorder" без соответствия в "offer" будут "offerorder" 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 виду of.merchantid = m.id ? Если это так, измените LEFT на RIGHT join.