Mysql Указатель левого соединения - PullRequest
2 голосов
/ 29 февраля 2020

Я использовал следующий запрос

select a.*,b.* from firsttable a left join secondtable b on a.id=b.item_id ORDER BY a.id DESC LIMIT 0,10

Для отображения элементов из двух таблиц, где id первой таблицы - это item_id второй. У меня вопрос, когда я пытаюсь отобразить это в php, если я хочу отобразить a.id, я могу попробовать:

while($row=$go->fetch_assoc()){
echo $row['id'];
}

или

while($row=$go->fetch_assoc()){
echo $row['a.id'];
}

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

, а во втором - неопределенный индекс. Не могли бы вы объяснить, почему это так?

Редактировать: Добавление таблиц, например

id
info
username

id
item.id
username

1 Ответ

0 голосов
/ 29 февраля 2020

Обе таблицы имеют столбец с одинаковым именем, поэтому при использовании select * неоднозначно, к какому столбцу id относится.

Единственный способ устранить неоднозначность - это явно перечислите все столбцы, которые вы хотите select, используя псевдонимы для омонимов:

select 
    a.id, 
    b.id b_id, -- alias for b.id
    b.item_id
    -- more columns here as needed
from firsttable a 
left join secondtable b on a.id=b.item_id 
order by a.id desc 
limit 0,10

Это одна из многих причин, почему select * обычно считается плохой практикой в ​​SQL.

Рекомендовать читать: По какой причине не стоит использовать select *?

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