选择要选择的表,取决于已经给定的表

时间:2017-06-28 10:25:53

标签: sql sqlite

出于我的意图,我必须选择一个表来根据已经给定的表的列值选择列。

首先我想到了一个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 个答案:

答案 0 :(得分:1)

这是一个建议,用于为mytable中的每个条目关联两个表之一的值。即这假设mytable不仅包含用于选择辅助表的单个条目。 有关这意味着什么的详细信息,请参阅" MCVE"在这个答案的最后。

如果要根据主表中的单个条目在两个辅助表之间切换,请参阅本答案的最后部分。

详细说明:

  • 一个硬编码的" value1" /" value2"将column1动态添加到辅助表的结果
  • 通过伪造的colummn1和辅助连接键加入,假设id
  • 一个union all从两个辅助表(包括假列1)
  • 制作一个表

选择* 来自mytable 离开加入 (从table1中选择" value1'作为column1,*  UNION ALL  选择' value2'作为column1,*来自table2) 使用(id,column1);

输出(对于下面提供的MCVE," a-f"来自table1," A-Z"来自table2):

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;

根据主表中的单个条目在两个表之间进行选择(在本例中为#34; 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