Результат, который вы хотите, на самом деле не в реляционном формате - потому что значения столбцов в данной строке действительно не имеют ничего общего друг с другом.
MySQL не поддерживает full join
, поэтому я рекомендую union all
с row_number()
для перечисления строк и group by
для их объединения:
SELECT MAX(positive) as positive), MAX(negative) as negative)
FROM ((SELECT p.review_id, p.libelle as positive, NULL as negative,
ROW_NUMBER() OVER (PARTITION BY p.review_id ORDER BY id) as seqnum
FROM positives p
WHERE p.review_id = 1
) UNION ALL
(SELECT n.review_id, NULL, n.libelle,
ROW_NUMBER() OVER (PARTITION BY n.review_id ORDER BY id) as seqnum
FROM negatives n
WHERE n.review_id = 1
)
) pn
GROUP BY review_id, id
ORDER BY review_id, id;
Обратите внимание, что это не вернет строк, если нет отзывов (положительных и отрицательных). Вы можете добавить left join
, если это действительно важно.