2017-06-28 9 views
1

私の意図では、既に与えられたテーブルのカラム値に依存してカラムを選択するテーブルを選択する必要があります。すでに選択されているテーブルの列値に依存して、選択するテーブルを選択してください

まず、私はCASE構文について考えました。これはsqliteで可能です。

SELECT * FROM 
CASE IF myTable.column1 = "value1" THEN (SELECT * FROM table1 WHERE ...) 
ELSE IF myTable.column1 = "value2" THEN (SELECT * FROM table2 WHERE ...) 
END; 

私はSQLを初めて使用しています。どのような構造が最も簡潔な(醜いではない)ソリューションと私はsqliteでそれを持つことができない場合、どのようなRDBMが最適だろうか?ここ

おかげ

+1

あなたが望むものをより明確に説明してください。あなたはテーブルを持っていて、クエリを書く方法を知らないのですか?または、テーブルを設計して、簡単に問い合わせることができますか? –

+1

あなたの質問は意味をなさない。 'myTable'とは何ですか?サンプルデータと望ましい結果が役立ちます。 –

+0

これには動的SQLが必要です。 –

答えて

0

はMYTABLE内の各エントリのための2つのテーブルのいずれかの値を対応付けるための提案です。私。これは、mytableがセカンダリテーブルを選択するための単一のエントリを含むだけではないことを前提としています。 この意味の詳細については、この回答の最後にある「MCVE」を参照してください。

メインテーブルの1つのエントリに基づいて2つのセカンダリテーブルを切り替える場合は、この回答の最後を参照してください。

詳細:

  • ハードコード「値1」/「値2」カラム1は、偽造colummn1、ここで二次ジョインキー、仮定によって接合二次テーブル
  • からの結果にオンザフライで追加として
  • union allid

セレクト(偽COLUMN1含む)二次テーブルの両方から単一のテーブルを作る*(ID、列1)を​​使用して を入力してください。

出力(MCVEは、以下に提供するために、TABLE1から "AF"、 "AZ" 表2から):

value1|1|a 
value2|2|B 
value1|3|c 
value1|4|d 
value2|5|E 
value2|6|F 

MCVE:

PRAGMA foreign_keys=OFF; 
BEGIN TRANSACTION; 
CREATE TABLE mytable (column1 varchar(10), id int); 
INSERT INTO mytable VALUES('value1',1); 
INSERT INTO mytable VALUES('value2',2); 
INSERT INTO mytable VALUES('value1',3); 
INSERT INTO mytable VALUES('value1',4); 
INSERT INTO mytable VALUES('value2',5); 
INSERT INTO mytable VALUES('value2',6); 
CREATE TABLE table2 (value varchar(2), id int); 
INSERT INTO table2 VALUES('F',6); 
INSERT INTO table2 VALUES('E',5); 
INSERT INTO table2 VALUES('D',4); 
INSERT INTO table2 VALUES('C',3); 
INSERT INTO table2 VALUES('B',2); 
INSERT INTO table2 VALUES('A',1); 
CREATE TABLE table1 (value varchar(2), id int); 
INSERT INTO table1 VALUES('a',1); 
INSERT INTO table1 VALUES('b',2); 
INSERT INTO table1 VALUES('c',3); 
INSERT INTO table1 VALUES('d',4); 
INSERT INTO table1 VALUES('e',5); 
INSERT INTO table1 VALUES('f',6); 
COMMIT; 

2つのテーブル間で選択するために単一に基づきますメインテーブルのエントリ(この場合は "mytable2":

select * from table1 where (select column1 from mytable2) = 'value1' 
union all 
select * from table2 where (select column1 from mytable2) = 'value2'; 

()mytable2のみ 'VALUE1' を含むと出力:

a|1 
b|2 
c|3 
d|4 
e|5 
f|6 
関連する問題