在MySQL中,我可以从一个表中选择所有列,从一个表中选择一个列吗?

时间:2009-12-21 16:18:01

标签: mysql

在MySQL中,我有一个简单的"SELECT * FROM foo"查询。我想JOIN表'bar',但是:

  1. 我只需要bar
  2. 中的一列
  3. 我特别不希望来自id的{​​{1}}列,因为它会与bar
  4. 中的id列冲突

    我知道我可以使用foo语句来避免名称冲突,但我不想让事情复杂化。有没有办法编写此查询而不从as命名我想要的每一列?

    换句话说,我可以说'给我foo中的所有列以及foo中的这一列吗?

    更新:为什么这是不好的做法

    有人指出bar通常是不好的做法,因为:

    • 返回不必要的数据。现在或将来,这可能包括一些大的内容,如BLOB数据列。
    • 如果数据库架构发生更改,则查询可能不会返回其中一个预期列。如果在查询中显式命名该列,则会出现错误;如果没有,它可能会无声地失败(例如,在标题应该去的地方插入一个空格)。

6 个答案:

答案 0 :(得分:10)

SELECT foo.*, bar.whatever FROM ...

但请注意,这被视为不良做法。您应该始终按照预期的顺序命名所有列。

答案 1 :(得分:3)

在SQL Server中,您可以执行以下操作:

SELECT foo.*, bar.column FROM ...

我相信它也可以在MYSQL中完成。

答案 2 :(得分:1)

SELECT foo.*, bar.id
FROM foo
JOIN bar
ON …

答案 3 :(得分:1)

如果您想使用JOIN执行此操作,可以使用以下语法:

SELECT b.column_you_want,f。*
来自foo f
内部连接栏b
ON f.id = b.id

请注意,b和f分别是bar和foo的昵称。 INNER JOIN是Alex Brasetvik答案的较长版本。我用它是因为你特意说你想把桌子连在一起。它也比短格式更通用,因为你可以使用LEFT JOIN或RIGHT JOIN(更多信息:http://dev.mysql.com/doc/refman/5.0/en/join.html)。您还可以通过多种方式连接多个表,如果您需要来自多个源(表)的相关数据,这非常有用。希望这有帮助!

答案 4 :(得分:0)

你能试试吗?

select f.id, b.* from foo f,bar b

答案 5 :(得分:0)

SELECT x.*, y.specific 
FROM x 
JOIN y on x.id = y.id 
...