1

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

sc_property_queries保存来自property_bid以及另一个表的值。并且有一个query_method在目标表中调用的字段,它告诉行来自哪个表。该字段raw_id包含来自源表的 ID。我想要做的是,从property_bid表中选择并将其插入到sc_property_queries中,但仅使用新项目,即避免基于raw_idand的重复项query_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;

此查询应返回property_bidsc_property_queries 中不存在的所有行。但它什么也没做。任何人都可以阐明这一点吗?

4

2 回答 2

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
于 2012-11-27T09:57:36.373 回答
0

您不需要加入,只需使用 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') 
于 2012-11-27T10:02:46.733 回答