从一个表中选择记录并将其插入到具有不同结构的不同表中,避免重复

时间:2012-11-27 09:54:00

标签: mysql

我有两个结构不同的表,比如property_bidsc_property_queries

sc_property_queries保存property_bid以及另一个表的值。在目标表中有一个名为query_method的字段,它告诉行来自哪个表。字段raw_id保存源表中的ID。我想要做的是,从property_bid表中选择并将其插入sc_property_queries,但只使用新项目,即避免基于raw_idquery_method的重复项。下面是我的MySQL代码似乎不起作用

INSERT INTO sc_property_queries (
  `property_id`,
  `raw_id`, `query_method`,
  `contact_fullname`,
  `contact_address`,
  `contact_email`,
  `contact_phone`,
  `contact_date`,
  `entry_date`,
  `title`,
  `query_status`,
  `remarks`,
  `description`
) 
SELECT 
 t1.property_id,
  t1.id,
  'web-bids',
  t1.fullname,
  'n/a',
  t1.email,
  t1.phone,
  t1.on_date,
  NOW(),
  'n/a',
  '1',
  'n/a',
  t1.comment 
FROM
  property_bid t1 
  LEFT JOIN sc_property_queries t2 
    ON (t1.id = t2.raw_id) 
WHERE  t2.query_method='web-bids' AND t2.raw_id IS NULL;

此查询应返回sc_property_queries中不存在的property_bid中的所有行。但它没有做任何事情。任何人都可以对此有所了解吗?

2 个答案:

答案 0 :(得分:1)

WHERE t2.raw_id IS NULL将结果集限制为仅t2中不存在的记录;因此t2.*都是NULL。因此,该标准不能与另一个标准WHERE t2.query_method='web-bids'同时成立。

也许您打算在联接中包含该标准:

FROM
  property_bid t1 
  LEFT JOIN sc_property_queries t2 
    ON (t1.id = t2.raw_id AND t2.query_method='web-bids')
WHERE t2.raw_id IS NULL

答案 1 :(得分:0)

您不需要JOIN只需使用NOT IN:

FROM
  property_bid t1 
  where 
   t1.id not in (select t2.raw_id from sc_property_queries t2 where t2.query_method='web-bids')