2017-06-28 65 views
1

對於我的意圖,我必須選擇一個表來從依賴於已經給定的表的列值中選擇列。select table從中選擇,取決於已給定表的列值

首先我想到了一個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的每個條目的一個值的建議。即這是假設mytable不僅包含用於選擇輔助表的單個條目。 有關這意味着什麼的詳細信息,請參閱本答覆末尾的「MCVE」。

如果您想根據主表中的單個條目在兩個輔助表之間切換,請參閱此答案的最後部分。

詳情:

  • 硬編碼「值1」 /「值2」作爲COLUMN1增加從輔助表
  • 通過僞造colummn1和二級加盟鍵,這裏假定加盟飛結果id
  • 一個union all從兩個次表(包括假列1)

選擇使一個單一的表* from mytable left join (select'value1'as column1,* from table1 UNION ALL select'value2'as column1,* from table2) using(id,column1);

輸出(用於MCVE下面提供, 「AF」 從表1, 「AZ」 從表2):基於單一

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; 

對於兩個表之間進行選擇:

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

MCVE條目在主臺(在這種情況下 「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