SQL выберите выход после внутреннего соединения - PullRequest
0 голосов
/ 21 января 2020

У меня есть одна проблема. У меня есть 2 таблицы, и я выполнил inner join для идентификатора людей. Теперь я хочу, чтобы имена тех людей писали. Я пробовал это, но он пишет имя первого на первом и втором.

SELECT g.id, g.idobject, 
       p.name || ' ' || z.last as Per1,
       p.name || ' ' || z.last as Per2
    FROM
        grup g 
           INNER JOIN people p on g.idper1=p.id 
           INNER JOIN people p on g.iper2=p.id

Ответы [ 2 ]

2 голосов
/ 21 января 2020

При объединении в одну и ту же таблицу дважды используйте разные псевдонимы.

Например:

SELECT g.id, g.idobject, 
       concat(p1.name, ' ', p1.last) as Per1,
       concat(p2.name, ' ', p2.last) as Per2
    FROM
        grup g 
           INNER JOIN people p1 on g.idper1=p1.id 
           INNER JOIN people p2 on g.iper2=p2.id
1 голос
/ 21 января 2020

Ваш код должен потерпеть неудачу. Вам нужны разные псевдонимы таблиц:

SELECT g.id, g.idobject, 
       p1.name || ' ' || p1.last as Per1,
       p2.name || ' ' || p2.last as Per2
FROM grup g JOIN
     people p1 
     ON g.idper1 = p1.id JOIn
     people p2
     ON g.iper2 = p2.id;

Если вы действительно используете MySQL, тогда соответствующая функция будет CONCAT() или еще лучше, CONCAT_WS():

SELECT g.id, g.idobject, 
       CONCAT_WS(' ', p1.name, p1.last) as Per1,
       CONCAT_WS(' ', p2.name, p2.last) as Per2
FROM grup g JOIN
     people p1 
     ON g.idper1 = p1.id JOIn
     people p2
     ON g.iper2 = p2.id;
...