2012-10-18 152 views
10

我试着用搜索引擎对于这个问题,但只能找到如何使用两个表来做到这一点,如下所示,MySQL的直接INSERT INTO与WHERE子句

INSERT INTO tbl_member 
SELECT Field1,Field2,Field3,... 
FROM temp_table 
WHERE NOT EXISTS(SELECT * 
     FROM tbl_member 
     WHERE (temp_table.Field1=tbl_member.Field1 and 
       temp_table.Field2=tbl_member.Field2...etc.) 
     ) 

这个工作对一个场景,但是现在我的兴趣是上传数据直接来自程序本身,而不使用两个表。我想要的是上传不在表格中的数据。我曾在我的头上的SQL就像下面,

INSERT INTO tbl_member (SensorIdValue, DataTimeValue, DataInValue, IncompleteValue, SpiValue, InfoValue) 
VALUES ('Sensor.org', '20121017150103', 'eth0','','','') 
WHERE (SensorIdValue != 'Sensor.org'AND DataTimeValue != '20121017150103'AND DataInValue != 'eth0'AND IncompleteValue != ''AND SpiValue != ''AND InfoValue != ''); 

但它是错的..可我知道做这件事请的正确方式,非常感谢你:)

+1

基于你想到的SQL,它看起来像你想插入一行到一个表中,如果它不存在。如果是这种情况,请看看这个问题/答案。 http://stackoverflow.com/questions/1361340/how-to-insert-if-not-exists-in-mysql – qsheets

+0

查看此问题。它可能会有帮助。 http://stackoverflow.com/questions/2930378/mysql-replace-into-alternative – Dev

+0

yeaaa thats exaclty是我需要il检查这些..非常感谢您的回复:) –

回答

14

INSERT语法不能有WHERE条款。只有当您使用INSERT INTO...SELECT声明时,才会找到INSERT条款WHERE条款。

第一种语法已经正确。

+0

okey谢谢你,生病尝试优化第一个查询我的需要:) –

+0

是啊我是多么愚蠢只需要在选择查询中调用同一张表,并将其与我想要的值进行匹配.. :)非常感谢:) –

+0

hehe,欢迎您! –

-3

INSERT INTO语句
INSERT INTO语句用于在表中插入新行。
SQL INSERT INTO语法

它可以编写INSERT INTO语句两种形式。

第一种形式不指定列名,其中数据将被插入,只有它们的值:

INSERT INTO table_name 
VALUES (value1, value2, value3,...) 

第二种形式同时指定列名和值将被插入:

INSERT INTO table_name (column1, column2, column3,...) 
VALUES (value1, value2, value3,...) 
+0

谢谢你的回复,但我想执行一条有条件的'INSERT INTO'声明:) –

1

如何使用WHERE子句执行INSERT INTO SELECT的示例。

INSERT INTO #test2 (id) SELECT id FROM #test1 WHERE id > 2 
+0

请编辑你的文章并解释答案。 –

+0

这是自我解释。这是一个示例,表明您可以使用WHERE子句进行INSERT INTO。这是一个非常简单的例子,任何人都应该能够理解这个概念。 – Pomster

+0

向下投票不是我的,我喜欢评论。如你所见,其他人不同意。我在低质量的帖子中找到了你的帖子,所以我建议你改进它。 –

0

如果我理解的目标是向表中插入新记录,但是如果数据已经在表上:跳过它!这是我的回答:

INSERT INTO tbl_member 
(Field1,Field2,Field3,...) 
SELECT a.Field1,a.Field2,a.Field3,... 
FROM (SELECT Field1 = [NewValueField1], Field2 = [NewValueField2], Field3 = [NewValueField3], ...) AS a 
LEFT JOIN tbl_member AS b 
ON a.Field1 = b.Field1 
WHERE b.Field1 IS NULL 

要插入的记录在新的值字段中。