UNION是否不应该用于更新子查询的WHERE子句中?或者就此而言,即使正常的选择子查询?更新子查询的WHERE子句中的UNION
有没有更好的方法来消除UNION这样的查询?
请注意,对于我的情况,UNION将导致相当少量的记录。
UPDATE mytable
set mytable.bla='xxx'
WHERE id IN (
SELECT id
FROM t1
INNER JOIN t2 ON t2.t1_id=t1.id
LEFT OUTER JOIN t3 ON t3.t1_id=t2.id
WHERE t2.id IN (1,2,3) AND t3.id IS NULL
UNION
SELECT id FROM t4
INNER JOIN t5 ON t5.id=t4.t5_id
LEFT OUTER JOIN t6 ON t6.t5_id=t5.id
WHERE t5.parent_id IN (1,2,3) AND t6.id IS NULL
);
UNION ALL吧? – jarlh
一个问题是,当使用等号时子查询只能返回一个值 - 也许你的意思是“in”。如果这个查询导致多个记录,它会错误...顺便说一句 - 我不相信查询是相关的,因为它没有引用'mytable'。 – sgeddes
@sgeddes是的,在看到您的评论后,我同意这可能与您提供的理由无关。但是,问题仍然是我应该或不应该在WHERE子句中进行查询。我认为当有人这样做时,我不应该使用'IN',而是使用'='。也许不会? – user1032531