从另一个表中使用SELECT插入SQL

时间:2018-04-24 09:53:54

标签: mysql sql

我有这些表格 表-A

meta_id | post_id | meta_key | meta_value
-----------------------------------------
Incremented | 35 | some_value  | 12345
Incremented | 45 | some_value  | 22345
Incremented | 32 | other_value | 22345

表-B

object_id | term_taxonomy_id | term_order
-----------------------------------------
    23    |       53         |     0
    54    |       65         |     0

我想像这样插入Table_B(Table_A.post_id,' 5302',0),所以我只需要Table_A中的post_id,但是那些有meta_key = some_value和meta_value>比方说20000,实际上这是一个unix时间戳

Table_B有这些道具

PRIMARY object_id, term_taxonomy_id
INDEX   term_taxonomy_id

我试过了这个查询

INSERT INTO Table_B (object_id,term_taxonomy_id) 
SELECT u.post_id , '5302' FROM Table_A u INNER JOIN Table_B o ON  u.post_id = o.object_id WHERE u.meta_key = 'some_value' AND u.meta_value < UNIX_TIMESTAMP(NOW())

我收到了这个错误:

  

查询错误(1062):重复输入&#39; 4066-5302&#39;关键&#39; PRIMARY&#39;

3 个答案:

答案 0 :(得分:0)

Table_B的主键是什么?

检查SELECT查询的结果是否已存在于Table_B的主键列中。

答案 1 :(得分:0)

可能您已经为这些值插入了值(条目&#39; 4066-5302&#39;)或者您可以选择返回更多行 在这种情况下,您应该使用不同的

  INSERT INTO Table_B (object_id,term_taxonomy_id) 
  SELECT distinct  u.post_id , '5302' 
  FROM Table_A u 
  INNER JOIN Table_B o ON  u.post_id = o.object_id 
    AND  u.meta_key = 'some_value' AND u.meta_value < UNIX_TIMESTAMP(NOW())

答案 2 :(得分:0)

你有多个元素,其中object_id:4066,term_taxonomy_id:5302,由于那些是你的主键,它们不能重复,考虑改变你的查询只返回唯一值。