我正在尝试将值更新为NULL,其中tracker_unique_id可以在ab_split_tracker_unique_link中找到,其中ab_split_id可以在第3个表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"
)
);
编辑:
表格示例
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 Split
ab_split_id | reference
32 review_invite_after_enquiry
如果在表ab_split_tracker_unique_link中找不到跟踪器,并且ab_split_id等于ab_split中的review_invite_after_enquiry
,我想将值设置为null答案 0 :(得分:0)
您的子查询与其父查询无关。让我们看一下你最内心的问题:
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
无关。
所以你要么更新所有记录,要么都没有。
我们宁愿期待像
这样的东西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子句。