SQL 包含 2 个 EXISTS 子句的更新语句

SQL Update statement with 2 EXISTS clause

我正在尝试将一个值更新为 NULL,其中 tracker_unique_id 可以在 ab_split_tracker_unique_link 中找到,而 ab_split_id 可以在第三个 table ab_split_candidate.

我不能通过给它不同的值来做到这一点,因为它们在本地用户之间可能不同

UPDATE trustpilot_links SET `invite_after_enquiry` = NULL 
WHERE EXISTS (
    SELECT tracker_unique_id, ab_split_tracker_unique_link.ab_split_candidate_id 
    FROM ab_split_tracker_unique_link 
    WHERE EXISTS (
        SELECT ab_split_candidate_id
        FROM ab_split_candidate LEFT JOIN ab_split 
        ON ab_split_candidate.ab_split_id = ab_split.ab_split_id WHERE ab_split.reference="review_invite_after_enquiry"
    )
);

编辑:
Table 个例子
Trustpilot 链接

trustpilot_link_id | invite_after_enquiry | tracker_unique_id 1 1 123 2 0 1234

ab_split_tracker_unique_link tracker_unique_id | ab_split_id 1234 32

Ab 拆分
ab_split_id | reference 32 review_invite_after_enquiry

如果在 table ab_split_tracker_unique_link 中找不到跟踪器,我想将值设置为 null,ab_split_id 等于 ab_split 中的 review_invite_after_enquiry ]

您的子查询与其父查询不相关,因为它们应该相关。让我们看看您最内在的查询:

SELECT ab_split_candidate_id
FROM ab_split_candidate 
LEFT JOIN ab_split ON ab_split_candidate.ab_split_id = ab_split.ab_split_id
WHERE ab_split.reference = 'review_invite_after_enquiry'

好吧,首先,您的 WHERE 子句消除了外部连接的记录,因此这本质上是一个 INNER JOIN。但是然后:是否有这样的记录。这与您可能更新的记录无关,也与您正在查找的 ab_split_tracker_unique_link 无关。

因此,要么您要更新所有记录,要么 none。

我们宁愿期待

UPDATE trustpilot_links tl
SET invite_after_enquiry = NULL 
WHERE EXISTS 
(
  SELECT *
  FROM ab_split_tracker_unique_link stul
  WHERE stul.tracker_unique_id = tl.tracker_unique_id
  AND ...
);

因此添加将子查询与其父查询相关联的 WHERE 子句。