我正在尝试更新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。
答案 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
);