2017-06-28 58 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