引用多个表sqlite where子句

时间:2014-12-01 17:50:46

标签: sql sqlite

SQL(ite)newb here,

我有一个带有两个表的sqlite3数据库,让我们称之为table_a和table_b。 table_a的格式有36亿个成对分数:

mol_a,mol_b,score
int, int, real
int, int, real
...

我在table_a中添加了两个空白列:year_a和year_b,我想用table_b中的数据填充。

表b由mol_id和年份格式

组成
mol_id,year
int,int
int,int
...

其中mol_id对应于table_a的mol_a和mol_b字段中的可能ID。

我认为我可以使用insert语句执行此操作,但我无法在where子句中获得多个表语法。任何建议将不胜感激。

这就是我正在尝试的:

INSERT INTO table_a.year_a 
SELECT year 
FROM table_b 
WHERE table_b.mol_id = table_a.mol_a;

但是看起来我的TABLE.COLUMN语法错了吗?

我确信有一个简单的答案,但我似乎无法找到它。

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

根据您的描述,您需要update,而不是insert

update table_a
    set year = (select b.year from table_b b where b.mol_id = table_a.mol_a);

答案 1 :(得分:0)

您确定不想要更新,即填充现有行的新列吗?在这种情况下:

UPDATE table_a 
SET year_a = (SELECT year 
              FROM table_b 
              WHERE table_b.mol_id = table_a.mol_a),
    year_b = (SELECT year 
              FROM table_b 
              WHERE table_b.mol_id = table_a.mol_b),

答案 2 :(得分:0)

尝试1

INSERT INTO tanimoto (year_a) 
SELECT year FROM date_ids table_b 
WHERE table_b.mol_id = table_a.mol_a;

尝试2

INSERT INTO tanimoto (year_a) 
SELECT year FROM date_ids table_b 
WHERE Exists (Select 1 From tanimoto table_a Where table_a.mol_id = table_b.mol_a;

在这里,我有点不舒服,我可能不完全明白你想要做什么。我看到很多otehr答案提到你可能 wnat并更新。我正在阅读你要添加一个新行到tanimoto的年份来自date_ids,你可以通过 mol 获得匹配。如果不是这样,那么你可能会看一些更新答案。