我有两个结构不同的表,比如property_bid
和sc_property_queries
。
sc_property_queries
保存property_bid
以及另一个表的值。在目标表中有一个名为query_method
的字段,它告诉行来自哪个表。字段raw_id
保存源表中的ID。我想要做的是,从property_bid
表中选择并将其插入sc_property_queries
,但只使用新项目,即避免基于raw_id
和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;
此查询应返回sc_property_queries中不存在的property_bid
中的所有行。但它没有做任何事情。任何人都可以对此有所了解吗?
答案 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')