【问题标题】:How to join all columns from one table如何连接一个表中的所有列
【发布时间】:2009-03-12 06:33:20
【问题描述】:

我试过这样做,但失败了。

SELECT table2.ID, table1.* FROM table2
LEFT JOIN table1 ON table1.ID = table2.table1ID

如何从表中选择所有列?

编辑:上面的查询没有错误。我不知道是什么导致了错误,但代码现在可以工作了。

【问题讨论】:

  • 将问题更改为“如何连接一个表中的所有列”,这是一个更好的主题。 SELECT tablename.* 很容易被误解。

标签: sql sql-server tsql


【解决方案1】:

您有字段名称冲突,因为两个表都有 ID 字段。你必须要

 SELECT table2.ID as t2_id, table1.* FROM table2
LEFT JOIN table1 ON table1.ID = table2.table1ID

【讨论】:

  • 字段名称冲突不会阻止查询运行。
  • 没有说是怎么失败的
【解决方案2】:

你所拥有的在语法上是正确的,你所说的失败是什么意思?您收到错误消息还是没有得到您想要的结果? (顺便说一句,选择 * 是一种不好的做法,只返回您需要的列。在这种情况下,您不需要所有列,因为 table1 中的 id 字段将具有与其连接的文件 din table 2 完全相同的数据)

【讨论】:

  • 感谢 HLGEM!为什么选择 * 不好?如果我有 20 列而我需要其中的 18 列怎么办?谢谢。
  • Select * 永远不应在生产服务器中使用,因为它通过网络发送的信息比您需要的多,随着时间的推移会产生性能问题。此外,如果您更改表格的结构,则 select * 会给出错误的结果,因此您原本应该有 10 列的报告突然变成了 11 列。而且如果有人愚蠢地改变了表中列的顺序,你可能会在错误的列中输入错误的数据。
【解决方案3】:
    SELECT t2.ID, t1.* FROM table2 t2
LEFT JOIN table1 t1 ON t1.ID = t2.table1ID

这适用于 sql 2000+

【讨论】:

    【解决方案4】:

    如果我在定义了@Table 数据类型的存储过程中工作,则使用选择表没有问题。* 特别是如果我将它用于最后的输出 SELECT。所以在这种情况下,关于生产服务器和网络流量的评论是没有意义的,因为整个存储过程都是在内存中执行的。在这种情况下,select.* 只是返回所有提前定义的列。

    【讨论】:

      猜你喜欢
      • 2020-08-14
      • 2022-09-28
      • 2013-04-24
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多