1

質問は私がやりたいことを正確に説明していないかもしれませんが、次の列を返すクエリを持つストアドプロシージャがあります

IDタイトルテーブル名

[テーブル名]列で参照されているJOINEDテーブルからタイトルを取得できるようにする必要があるため、現在、タイトルはNULLとして返されています。クエリで返されるテーブル名の値は複数ある可能性があり、各レコードのタイトルは、各レコードの[テーブル名]フィールドで参照されているテーブルから取得する必要があります。

これを行う純粋なSQLの方法はありますか?

一時テーブルを作成し、各レコードをループして、Tablenameのテーブルに対して個別のクエリを実行してタイトルを設定することを考えましたが、よりクリーンなソリューションを望んでいます。

ありがとう

4

1 に答える 1

2

これは、SQLに直接適していない設計を示している可能性があります。タイトル情報が複数のテーブルに保存されている理由は何ですか?そうでないようにリファクタリングできますか?

ただし、テーブルのリストが固定リストである場合は、解決策があります。ビューで使用UNION ALLするか、CTEを使用してインラインビューを使用し、多数のテーブルを1つのテーブルのように見せます...

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 に答える