从具有相同命名列的两个表中进行选择

时间:2010-12-29 07:15:59

标签: sql standards

SELECT bar.*, baz.foo FROM bar LEFT JOIN baz如果我在bar中有一个名为foo的列,那么标准的SQL行为是什么?结果集是否只包含来自baz的foo或......?

3 个答案:

答案 0 :(得分:1)

它将包含两个表中的列foo

由于您的问题被标记为“标准”,我建议在结果集中为2列使用明确的别名。

答案 1 :(得分:0)

它将包含两个名为foo的输出列;一个包含表bar中的值和一个表baz中的值。

如果你进行自然连接,那么foo列将在连接中使用,并且输出中只会出现一个值 - 但是你做了一个左外连接,而不是一个自然连接。

您需要使用ON子句或USING子句指定连接条件(但不是每个DBMS都支持USING)。

答案 2 :(得分:0)

它将包含2 x foo列。这不是SQL的问题,但它往往会破坏客户端代码。只需别名

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

虽然我们处于标准状态,但SELECT *并不是一个好习惯:使用命名列。在其他问题中已经讨论过死亡......