如果ID不存在,则将整行插入InnoDB表中

时间:2014-07-31 08:46:43

标签: php mysql sql insert

我试图将数据从一个表插入到另一个表中,只有整行不存在。

每行都有一个自动递增ID。我只是要检查aganist ID,如果没有则插入行。

我见过人们使用:

  • INSERT IGNORE - 我没有看到明确的解释。
  • INSERT ON DUPLICATE KEY UPDATE - 这并不理想,因为我不想更新任何现有行,我想插入新行。

到目前为止我写的代码似乎没有起作用:

INSERT INTO $tableNameOrig o
SELECT * FROM $tableNameTemp t
WHERE NOT EXISTS(SELECT id FROM $tableNameOrig WHERE o.id=t.id);

有谁知道我怎么做到这一点?

感谢您的时间,我已经绞尽脑汁待了几个小时!

更新 - 已解决

事实证明,不为每个表名分配一个字母(o和t),并在整个查询中使用表名称:

INSERT INTO $tableNameOrig
SELECT * FROM $tableNameTemp
WHERE NOT EXISTS(SELECT id FROM $tableNameOrig WHERE $tableNameOrig.id = $tableNameTemp.id); 

这是我肩膀的重量!

2 个答案:

答案 0 :(得分:1)

尝试:

INSERT INTO $tableNameOrig
SELECT * FROM $tableNameTemp t
WHERE NOT EXISTS (SELECT id FROM $tableNameOrig WHERE $tableNameOrig.id = t.id);

或:

INSERT INTO $tableNameOrig
SELECT * FROM $tableNameTemp t
WHERE t.id NOT IN (SELECT id FROM $tableNameOrig);

答案 1 :(得分:-1)

<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
    die('Could not connect: ' . mysql_error());
}

mysql_select_db("my_db", $con);
$sql = "INSERT INTO contacts VALUES
(
    'SpongeBob','Squarepants','0415252522'
)";

// Execute query
if(mysql_query($sql,$con))
    echo "data inserted";
else
    echo "could not insert data";
////dis will allow to do it