SQL LEFT JOIN не заполняет столбец значениями из таблицы 2 - PullRequest
1 голос
/ 25 апреля 2020
SELECT zmogaus_id, hobio_id, hobio_pav2
FROM zmogaus_hobiai 
LEFT JOIN hobiai 
ON zmogaus_hobiai.hobio_pav2=hobiai.hobio_pav
WHERE zmogaus_id=3

Используя это, я хочу получить

zomgaus_id =3 . hobio_id =1 . hobio_pav2 =name1 (from hobio_pav)
zomgaus_id =3 . hobio_id =2 . hobio_pav2 =name2 (from hobio_pav)

Но hobio_pav2 остается пустым столбцом. Я попытался не иметь столбец hobio_pav2, но проблема остается в том, чтобы не добавлять значения hobio_pav к соответствующим идентификаторам в hobio_id. столбец hobio_pav2 пуст

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

пример данных:

table hobiai: id = 1, hobio_pav = name1;id = 2, hobio_pav = name2;id = 3, hobio_pav = name3;

    table zmogaus_hobiai: 
id =1, zmogaus_id=2, hobio_id=2, hobio_pav2 = null;
id =2, zmogaus_id=2, hobio_id=3, hobio_pav2 = null;
id =4, zmogaus_id=3, hobio_id=1, hobio_pav2 = null;
id =5, zmogaus_id=3, hobio_id=3, hobio_pav2 = null;

Желаемый результат:

generated table: 
zmogaus_id=3, hobio_id=1, hobio_pav2=name1;
zmogaus_id=3, hobio_id=3, hobio_pav2=name3;

Полученный результат:

generated table: 
zmogaus_id=3, hobio_id=1, hobio_pav2= ;
zmogaus_id=3, hobio_id=3, hobio_pav2= ;

Ответы [ 3 ]

1 голос
/ 25 апреля 2020

Если вы хотите обновить

zmogaus_hobiai

UPDATE zmogaus_hobiai zh INNER JOIN hobiai h
    ON zh.hobio_id=h.id
    SET zh.hobio_pav2 = h.hobio_pav
    WHERE zmogaus_id=3;

И ваш SELECT будет выглядеть так

SELECT zmogaus_id, h.hobio_id, hobio_pav
FROM zmogaus_hobiai  zh
INNER JOIN hobiai h
ON zh.hobio_id=h.id
WHERE zmogaus_id=3:
0 голосов
/ 25 апреля 2020

Исходя из ваших примеров данных, похоже, что вам просто нужно исправить условие соединения - вы должны присоединиться к id s, а не к другим строковым столбцам:

SELECT z.zmogaus_id, z.hobio_id, h.hobio_pav2
FROM zmogaus_hobiai z
LEFT JOIN hobiai h ON h.id = z.zmogaus_id
WHERE z.zmogaus_id = 3

Обратите внимание, что я добавил псевдонимы таблиц и префикс всех столбцов с таблицей, к которой они принадлежат. Это облегчает чтение запроса и позволяет избежать двусмысленности, когда в разных таблицах есть столбцы омонимов.

0 голосов
/ 25 апреля 2020

Вы ищете coalesce()?

SELECT zh.zmogaus_id, coalesce(h.hobio_id, zh.hobio_pav2)
FROM zmogaus_hobiai zh LEFT JOIN
     hobiai h
     ON zh.hobio_pav2 = h.hobio_pav
WHERE zh.zmogaus_id = 3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...