В новой таблице есть два столбца (table1 join table2), которые имеют одинаковое имя столбца, как получить значения обоих соответственно - PullRequest
1 голос
/ 23 декабря 2009
select * from table1 join table2 on table1.column3=table2.column4 where ...
...
$row=mysql_fetch_assoc($result);

Однако в новой таблице есть два столбца (table1 join table2), которые имеют одинаковое имя столбца, как получить значения обоих значений соответственно?

Ответы [ 4 ]

6 голосов
/ 23 декабря 2009

Вызовите columsn специально с псевдонимом типа

SELECT table_1.id as table_1_id, table_2.id as table_2_id

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

1 голос
/ 23 декабря 2009

Когда возникает конфликт имен столбцов из-за запроса, объединяющего 2+ таблицы, вы не можете использовать *. Вы можете использовать:

SELECT table_1.*, 
       table_2.*
  FROM table_1, 
       table_2

Если это не возвращает список нужных вам столбцов, вам придется явно перечислить каждый столбец. Обратного пути нет - это сделка «все или ничего».

Псевдонимы таблицы

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

SELECT t1.*, 
       t2.*
  FROM table_1 AS t1, 
       table_2 t2

Любая запись псевдонимов поддерживается. Они также необходимы, если вы хотите присоединить таблицу к себе.

1 голос
/ 23 декабря 2009

Префикс имени столбца в select с именем таблицы.

select table1.my_column, table2.my_column
from table1, table2
where table1.id = table2.t1_id

Но при использовании этого метода вам придется читать столбцы, используя их возвращенные порядковые индексы, а не их имена. В другом ответе упоминалось использование as для именования каждого столбца, поэтому учтите, что если вы собираетесь читать их по имени.

0 голосов
/ 23 декабря 2009

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

Select a.*, 
       b.*, 
       a.id as a_id, 
       b.id as b_id,
       a.name as a_name,
       b.name as b_name
  from tablea a,
       tableb b
...

Быть избыточным не помешает, так как. * Включает в себя a_id и a_name, но в ассоциативном массиве значения из * теряются, поэтому просто поместите их обратно с новыми уникальными именами.

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