2016-12-07 14 views
4

列がテーブルに存在する場合のみ選択する必要があります。それ以外の場合はnullに設定できます。SQL - 条件付きで列が選択されている場合

name marks 
joe 10 
john 11 
mary 13 

クエリ:

select 
    name, 
    marks if it exists else null as marks1 -- pseudo code 
from 
    table1 
以下

サンプルテーブルは、marks COLがあること、それは表1

を存在するかどうかチェックする必要があります必要はないと言うことができます

marksを選択するにはどうすればよいですか?

+0

'marks 'がtable1の列であるかどうか*知りませんか? –

+0

データベーススキーマの管理と移行の方法を**実際に**再考する必要があります。列が存在するかどうかわからないという事実は、誤ったプロセスを使用してデータベース内のテーブルを作成および更新していることを示している可能性があります。また、 'marks1'テーブルを持つことは、正規化されていないデザインの兆候でもあります。あなたは動的SQLを使ってそのようなことをすることができますが、**テーブルを管理する方法を修正することは**ますます多くなります –

+1

@a_horse_with_no_nameはより広い点で同意しますが - これはスキーマと移行に関する質問ではありません - :)そしてコンテキストはアプリケーションではなく、実際の世界のデータは、私が制御できないソースから来ています - それはすべての期待される列であるかもしれないし、そうでないかもしれません。これをチェックしてください。 – user3206440

答えて

0

これを試してみてください:

IF EXISTS(SELECT 1 
      FROM information_schema.columns 
      WHERE table_name='your_table' and column_name='your_column') THEN 
    SELECT your_column as 'some_column' 
ELSE 
    SELECT NULL as 'some_column' 
END IF 
+0

IF EXISTS()はSQLではありません... –

+0

@EvanCarroll PostgreSQLは 'EXISTS()'をサポートしていませんか? –

+0

はい、 'plpgsql'にあります。これは手続き型言語であり、PostgreSQLがサポートするものの多くです。しかし、それはSQLではありません。手続き型言語で有効なスニペットを実行するだけではいけません。 –

0

はそれを許可しないこの

IF COL_LENGTH('your_table_name','column_name_you_want_to_select') IS NULL BEGIN 
--This means columns does not exist or permission is denied 
END 
else 
--Do whatever you want 
5

SQLを試してみてください。あなたの結果セットの2つのオプションがあります:

  1. 静的含める
  2. すべて*tbl.*

と列拡大によるテーブルまたはサブクエリからおそらくこれは、あなたのニーズに合う、SELECT * FROM table1;をあなたはいつも買ってあげますその列が存在する場合はその列を返します。