带有2个INNER JOIN的MYSQL更新挂起

时间:2010-06-30 17:47:15

标签: mysql sql inner-join

我正在尝试根据表中是否存在两个连接表来更新表中的字段。

update quotes
inner join collection_records ON quotes.id <> collection_records.record_id
inner join subcollection_records ON quotes.id <> subcollection_records.record_id
set quotes.status_id = 1
where collection_records.type = 'Quote' 
   or subcollection_records.type = 'Quote'

此查询运行,但挂起。如果我在内连接上删除它可以工作,但我需要检查两个连接表是否存在引用ID。

3 个答案:

答案 0 :(得分:2)

必须要小心,因为为了获得独特的支持数据,使用JOIN会冒重复数据的风险。我将您的查询重新编写为:

UPDATE QUOTES
   SET status_id = 1
 WHERE id NOT IN (SELECT cr.record_id
                    FROM COLLECTION_RECORDS cr
                    WHERE cr.type = 'Quote')
   AND id NOT IN (SELECT sr.record_id
                    FROM SUBCOLLECTION_RECORDS sr
                   WHERE sr.type = 'Quote')

使用LEFT JOIN / IS NULL:

UPDATE QUOTES
LEFT JOIN COLLECTION_RECORDS cr ON cr.record_id = id
                               AND cr.type = 'Quote'
LEFT JOIN SUBCOLLECTION_RECORDS sr ON sr.record_id = id
                                  AND sr.type = 'Quote'
  SET status_id = 1
WHERE cr.record_id IS NULL
  AND sr.record_id IS NULL

答案 1 :(得分:0)

我的猜测是,这主要是由于&lt;&gt; (NOT EQUALS)运算符。这真的是你在这里寻找的吗?

答案 2 :(得分:0)

此外,如果你在两个联合表中都有一个引用记录......你将得到2条记录。似乎取出其中一个连接只返回一条记录给你。尝试对两个表中存在的某个Quote执行select而不是更新,看看是否有两个记录。您必须修改连接以便返回一个引用记录。

相关问题