【问题标题】:Include table name in column from select wildcard sql在选择通配符 sql 的列中包含表名
【发布时间】:2013-05-22 09:09:53
【问题描述】:

如果我使用通配符从表中选择所有列,是否可以在返回的列中包含表名?

进一步解释。假设我想连接两个表,并且两个表都有列名“name”和许多其他列。我想使用通配符来选择所有列,而不是在选择中明确指定每个列名。

Select *
From 
TableA a,
TableB b
Where 
a.id = b.id

我可以编写一个 sql 以将一个列名称作为“a.name”(或 TableA.name)返回一个作为“b.name”(或 TableB.name)而不是看到两个具有相同名称“name”的列) 没有明确地将列名放在选择中?

我更喜欢 mssql 的解决方案,但其他数据库也可以作为参考。

谢谢!

【问题讨论】:

  • 不,您需要明确使用列别名。在生产代码中使用* 无论如何都是不好的编码风格。
  • 谢谢 a_horse_with_no_name。我只是在我的 dbartisan 上做一些随意的 sql 选择,如果可行的话突然梦想,但似乎它只会留在我的梦想中 :)

标签: sql database


【解决方案1】:

您可以使用select a.*, ' ', b.* from T1 a, T2 b 使 T1 中的列结束和 T2 中的列开始的位置更加明显。

【讨论】:

  • 感谢 Stoleg,我认为它会有所帮助
【解决方案2】:

您基本上是在 ID 字段上连接两个表,因此您只会看到一个标有“ID”的列,而不是两个,因为您要求只查看表 a 和表 b 中 ID 相同的那些记录:他们共享相同的 id。

【讨论】:

  • 谢谢安东尼。我重新阅读了我的问题并同意使用“ID”作为示例没有意义。我已修改我的问题以使用列“名称”而不是“id”。再次感谢。
  • 有一些变通方法,例如创建临时表,其中只包含您想要的列,这样您就可以为两个 ID 列设置别名。问题(如我所见)是无论如何你都会得到重复的列。除非您有大量列,否则最好在查询中明确命名列。一方面,如果您不需要返回所有列,则可以减少 db 使用时间;对您来说更重要的是,它可以让您为列分配别名。
【解决方案3】:

试试...

SELECT 'TableA' AS 'Table', A.* FROM TableA A
WHERE A.id IN (SELECT id FROM TableB)
UNION
SELECT 'TableB' AS 'Table', B.* FROM TableB B
WHERE B.id IN (SELECT id FROM TableA)
ORDER BY id, [Table]

【讨论】:

    猜你喜欢
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    相关资源
    最近更新 更多