1

这个问题可能不完全描述我想要做什么,但我有一个存储过程,它有一个返回以下列的查询

ID 标题 表名

Title 当前作为 NULL 返回,因为我需要能够从 Tablename 列中引用的 JOINED 表中获取它。查询中可能返回几个不同的 Tablename 值,并且需要从每条记录的 Tablename 字段中引用的表中获取每条记录的 Title。

有没有一种纯粹的 SQL 方式来做到这一点?

我考虑过创建一个临时表,然后遍历每条记录并通过对 Tablename 中的表运行单独的查询来设置标题,但我希望有一个更清洁的解决方案。

谢谢

4

1 回答 1

2

这可能表明设计不直接适合 SQL。您的 Title 信息存储在多个表中的原因是什么?可以重新考虑不是这样吗?

但是,如果表列表是固定列表,则有解决方案;在视图中使用UNION ALL,或 CTE 使用内联视图,使您的许多表看起来像一个表......

WITH
  inlineView
AS
(
              SELECT 'table1' AS tableName, x, y, z, title FROM table1
  UNION ALL   SELECT 'table2' AS tableName, x, y, z, title FROM table2
  UNION ALL   SELECT 'table3' AS tableName, x, y, z, title FROM table3
)
SELECT
  *
FROM
  aTable
INNER JOIN
  inlineView
    ON  aTable.tableName = inlineView.tableName
    AND aTable.x         = inlineView.x

如果你不能让它适应它,或者你需要在视图中包含的表的数量不固定,你可能需要一个循环和一些动态 SQL。同样,一个强有力的指标表明该模式对 SQL 并不友好。

于 2012-06-08T09:39:05.237 回答