Как использовать Distinct OR Group by с Inner Join? - PullRequest
0 голосов
/ 10 марта 2020
У

есть проблема с sql запросом, простым, но хотя я сижу на нем 3 дня и не могу понять, что не так, пожалуйста, помогите.

Таблица 1: enter image description here

Таблица 2

enter image description here

Результат enter image description here

Желаемый результат - Я хочу отображать каждый идентификатор портфеля ТОЛЬКО ОДИН РАЗ.

sql запрос:

SELECT DISTINCT `portfolio`.`id`, `Description`,`Title`, `portfolio_images`,`Date_created`
FROM `portfolio`
    LEFT OUTER JOIN `portfolio_images` ON `portfolio_images`.`portfolio_id` = `portfolio`.`id`

Любые идеи / решения приветствуются. Спасибо

1 Ответ

0 голосов
/ 10 марта 2020

Использовать row_number():

SELECT p.*, pi.*
FROM `portfolio` LEFT OUTER JOIN
     (SELECT pi.*,
             ROW_NUMBER() OVER (PARTITION BY portfolio_id ORDER BY portfolio_id) as seqnum
      FROM portfolio_images pi
     ) pi
     ON pi.portfolio_id = p.id AND seqnum = 1;

РЕДАКТИРОВАТЬ:

В более старых версиях, если вам нужен только один столбец из portfolio_images, вы можете использовать коррелированный подзапрос:

select p.*,
       (select pi.portfolio_images
        from portfolio_images pi
        where pi.portfolio_id = p.id
        limit 1
       ) as portfolio_images
from portfolio p;

Что касается вашего запроса, DISTINCT применяется к всем столбцам, поэтому очевидно, что разные столбцы имеют разные значения, даже если столбцы из portfolio одинаковы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...