【问题标题】:SQL update table and INSERT only new lines with selected fields from another tableSQL 更新表并仅插入带有来自另一个表的选定字段的新行
【发布时间】:2015-11-27 01:53:30
【问题描述】:

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

【问题讨论】:

  • 请注意,表的设计应具有适当的约束,以防止添加重复的行。
  • 我明白了。好吧,我用的是joomla组件表,其实我真的不知道如何修改这个表的设计,你认为我应该修改表的设计才能使用你下面答案中的解决方案吗?跨度>
  • 我不知道如何使用 Joomla!

标签: mysql


【解决方案1】:

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

在您显示的查询末尾添加WHERE ID > 6000 很容易,但除了临时更新之外,这几乎没有什么用处。更稳定的方法是 a) 对表的受挫连接,或 b) WHERE NOT IN/WHERE NOT EXISTS 子句:

方法0:

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

方法一:

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

方法二:

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

【讨论】:

  • 请问,“临时”更新是什么意思?我不明白
  • 临时我的意思是一次性的,你会使用一次但不会再次使用的东西。完成后扔掉
猜你喜欢
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多