Выбор из двух таблиц с одинаковым именем столбца - PullRequest
0 голосов
/ 29 декабря 2010

SELECT bar.*, baz.foo FROM bar LEFT JOIN baz если у меня есть столбец с именем foo в баре, каково стандартное поведение SQL?Будет ли результирующий набор содержать только foo из baz или ...?

Ответы [ 3 ]

1 голос
/ 29 декабря 2010

Он будет содержать столбец foo из обеих таблиц.

Поскольку ваш вопрос помечен как «стандарт», я бы предложил использовать явный псевдоним для 2 столбцов с одинаковым именем в наборе результатов.

0 голосов
/ 29 декабря 2010

Он будет содержать 2 x столбца foo. Это не проблема для SQL, но он имеет тенденцию нарушать клиентский код. Просто псевдоним это

SELECT bar.*, baz.foo AS foo2...
SELECT bar.*, foo2 = baz.foo...

Пока мы придерживаемся стандартов, SELECT * не является хорошей практикой: используйте именованные столбцы. Это уже обсуждалось до смерти в других вопросах ...

0 голосов
/ 29 декабря 2010

Он будет содержать два выходных столбца с именем foo; один со значениями из таблицы bar и один со значениями из таблицы baz.

Если вы выполняете естественное объединение, то в соединении будут использоваться столбцы foo, и в выходных данных будет отображаться только одно значение, но вы сделали внешнее левое соединение, а не естественное соединение.

Необходимо указать условие соединения с помощью предложения ON или предложения USING (но не каждая СУБД поддерживает USING).

...