2014-03-31 35 views
0

我想编写一个INSERT指令,该指令使用具有WHERE子句的子查询从不同的表中获取其值中的一个值,该WHERE子句可比较两个表。通过查看代码可能会更容易理解。比较子查询中两个表的值

INSERT INTO table1 (f1,f2,f3) 
VALUES ("foo","bar",(SELECT e3 FROM table2 WHERE table2.e2 = table1.f2)); 

我已经尝试过几种组合,但目前为止没有任何效果。这可以做到吗?怎么样?

+0

你不能这样做!想想看,这没有意义。 –

+0

您的问题不清楚,这就是为什么样本数据和期望的结果在问题中几乎总是有用的原因。 –

回答

0

也许你想要更新?

update table1 t1 join 
     table2 t2 
     on t1.f2 = f2.e2 
    set f2 = 'foo', 
     f3 = 'bar'; 
+0

这就是我最终做的。谢谢! – mustieles

0

WHERE子句有点奇怪,因为table1.f2的值在表中尚不存在,它正要插入(或者我误解了查询演示的内容)。也许你想这个代替:

INSERT INTO table1 (f1,f2,f3) 
SELECT "foo","bar", e2 
FROM table2 
WHERE table2.e2 = "bar"; 

上面的示例演示了如何从SELECT语句来完成SQL INSERT

+1

你是对的。 –

+0

您理解正确,查询完成后表格不存在。我已经看过你的解决方案,但它似乎不正确...为什么我会选择“foo”和“bar”?这些是值,而不是字段名,从表1中,不是2 ... – mustieles

+0

@gulagdandy“foo”和“bar”是硬编码值,它在语法上是正确的。但是如果你没有双引号,MySQL就会将它理解为字段名称而不是字符串值。 – har07