在SQL查询中包含表名

8

我需要做的是从一个包含4个来自不同表的select语句的union查询结果中获取表名。我需要获取id和表名以进行进一步处理。

例如,我有table1、table2、table3和table4,并且有一个查询:

SELECT id from table1,blablabla
UNION
SELECT id from table2,blablabla
UNION
SELECT id from table3,blablabla
UNION
SELECT id from table4,blablabla

我需要的结果是:

1, blablabla, table1
4, blablabla, table4
7, blablabla, table2

你能使用代码标签,并向我们展示你想要的东西吗? - JNK
目前所有的答案都建议将其硬编码为字符串。我查找的其他资料讨论的是将其作为变量传递给动态SQL。那么自动生成它怎么样?是否有像@@SERVERNAME这样的东西?SELECT tablealias.@@TABLENAME FROM Table1 tablealias - undrline - Reinstate Monica
3个回答

25
SELECT
    ID,
    'table1' as TableName
FROM
    table1

UNION

...

SELECT
    ID,
    'table4' as TableName
FROM
    table4

3
SELECT  myid, My otherfield, 'table1' as tablename From table1
UNION
SELECT  myid, My otherfield, 'mytabl2' From table2

考虑另外几个要点,如果这些表是互斥的,请使用UNION ALL代替,速度会更快。此外,如果数据库设计不正确,通常会出现这种类型的问题,如果这些表中有相同的字段,为什么不将它们全部放入一个表中?如果可能的话重新设计,至少考虑一下是否最好这样做。我不知道这些表是什么,所以无法评估它们是否应该在一个表中,但通常这是一种代码气味。

感谢提供的信息。一开始只有一个表,但是新数据属于其他类别,因此现在表格是针对不同类别并保存相似数据,但出于安全原因应该保持分开。只有这一个查询访问了多个表格,而且仅用于列出。 - Alakdae

2

在你的请求中添加表名

SELECT
  id,
  blablabla,
  'table1' as tableName
FROM
  table1
UNION
SELECT
  id,
  blablabla,
  'table2' as tableName
FROM
  table2
 ...

谢谢!正是我所需要的,但是devnull回答得更快,所以我接受了他的答案。 - Alakdae

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接