SQL更新表并仅插入包含另一个表

时间:2015-11-26 17:45:25

标签: mysql

我正在尝试更新2个网站的mysql数据库,以便拥有相同的产品,我需要找到一个只会在产品表中添加新产品系列的查询,我正在尝试:

INSERT INTO pre_upde_prop 
(id
,pro_name
,pro_alias
,agent_id
,ref
,category_id
,price
,pro_small_desc
,pro_full_desc
,pro_type
,isFeatured
,published
,isSold
,note
,city
,state
,country
,province
,postcode
,hits
,created
,modified
,bed_room
,square_feet
,lot_size
,number_of_floors
,parking
,address
) 
SELECT id
     , name
     , alias
     , agent_id
     , ref
     , cid
     , price
     , description
     , text
     , type
     , featured
     , published
     , available
     , description
     , lid
     , sid
     , cyid
     , lid 
     , postcode
     , hits
     , listdate
     , refresh_time
     , bedrooms
     , area
     , covered_area
     , garage
     , garage
     , years 
  FROM pre2_properties_products;

但是当我运行此查询时,它会添加所有行的重复项。我需要找到一个查询,例如,在行号为6000的情况下启动插入,例如,在6000之后仅插入新行。

两个表都有相同的产品ID。

1 个答案:

答案 0 :(得分:1)

您需要某种方法来限制通过INSERT进入的记录。目前,您正在从没有任何条件的表中进行选择。您需要的是限制SELECT语句的结果以消除已存在的任何记录。

如果将WHERE ID > 6000添加到您已经显示的查询的末尾非常容易,那么除了临时更新之外,这几乎没什么用处。更稳定的方法是a)对表的沮丧联接,或b)不存在/不存在的条款:

方法0:

INSERT INTO pre_upde_prop (...) 
SELECT ... 
FROM pre2_properties_products
WHERE id > 6000;

方法1:

INSERT INTO pre_upde_prop (...) 
SELECT ... 
FROM pre2_properties_products AS a
LEFT JOIN pre_udpe_prop AS b ON b.ID = a.ID
WHERE b.ID IS NULL

方法2:

INSERT INTO pre_upde_prop (...) 
SELECT ... 
FROM pre2_properties_products AS a
WHERE id NOT EXISTS (
  SELECT id FROM pre_udpe_prop
);