Соедините неоднозначное значение в select и on - PullRequest
0 голосов
/ 28 октября 2018


У меня проблемы с INNER JOIN .

Таблица ref_vg_ou :

id_vg | ref
  12     1
  13     1
  14     2

Таблица vignette_ou :

id_vg | ou_name | ou_info
  12     ezzaez   eaezaeae
  13      tbtrb    grtrr
  14      hyht      yhty

запрос mySQL:

SELECT id_vg, ou_name, ou_info
        FROM vignette_ou AS vg
        INNER JOIN ref_vg_ou AS ref
            ON vg.vg_id = ref.vg_id
        WHERE ref.ref = ?

Моя консоль возвращает ошибку:

Список полей 'id_vg' неоднозначен

Я не понимаю, почему мой "id_vg""неоднозначно?Я пытался с Alias, но я получил новую ошибку:

SELECT vg.id_vg, vg.ou_name, vg.ou_info
        FROM vignette_ou AS vg
        INNER JOIN ref_vg_ou AS ref
            ON vg.vg_id = ref.vg_id
        WHERE ref.ref = ?

Ошибка:

vg.vg_id 'неизвестно в предложении

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Поскольку вы объединяете два столбца с одинаковыми именами в предложении ON, вместо этого вы можете использовать альтернативный синтаксис JOIN с USING и соответствующими столбцами для вашего условия JOIN ( документация * 1004)*).Это также устранит необходимость в псевдонимах таблиц для определения того, из какой таблицы поступает id_vg в SELECT.

Так что

SELECT id_vg, ou_name, ou_info
FROM vignette_ou
INNER JOIN ref_vg_ou USING (id_vg)
WHERE ref = ?  

также будет работать здесь.

0 голосов
/ 28 октября 2018
  • Ваша структура таблицы примеров показывает, что у вас нет столбца vg_id, но id_vg.
  • В случае запросов, включающих несколько таблиц, предпочтительно использовать имя таблицы или определенный псевдоним (если есть) для ссылки на соответствующие столбцы.Появляется сообщение об ошибке «Неоднозначный» столбец, поскольку в обеих таблицах есть столбец id_vg.MySQL не может определить, какой из них выбрать (без указания правильного имени таблицы или псевдонима).
  • Кроме того, обратите внимание , что после определения псевдонима в таблице вы можете ссылаться на его столбцы только с помощью этого псевдонима.

Попробуйтевместо этого:

SELECT vg.id_vg, vg.ou_name, vg.ou_info
FROM vignette_ou AS vg
INNER JOIN ref_vg_ou AS ref
  ON vg.id_vg = ref.id_vg
WHERE ref.ref = ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...