好的,所以表1包含一个具有相关ID号的用户列表。它还包含一个“非活动”字段(我将在下面引用它)。表2显示了已填写的报告列表,其中记录了用户的报告以及该唯一ID。
我想要做的是选择超过30天的报告。如果用户尚未在该时间范围内填写报告,我想将表1中的状态设置为“无效”。
我面临的最大挑战是,有许多报告都返回了相同的ID号。我不知道如何将这些变成数组或任何没有重复的东西。
我希望这很清楚。
答案 0 :(得分:0)
您似乎正在为没有少于30天的报告的用户查找user_id
值列表。您希望在UPDATE
查询中使用该列表来设置这些用户inactive
。
清单:
SELECT u.user_id
FROM user u
LEFT JOIN report r ON r.user_id = u.user_id
AND r.reportdate < CURDATE() - INTERVAL 30 DAY
WHERE r.user_id IS NULL
这是用于查找与左侧JOIN标准不匹配的右侧行的LEFT JOIN ... IS NULL
模式。
一旦你得到了解决方案(嘿!检查它并确保它是对的!)你可以在UPDATE查询中使用它:
UPDATE user
SET status='inactive'
WHERE user_id IN (
SELECT u.user_id
FROM user u
LEFT JOIN report r ON r.user_id = u.user_id
AND r.reportdate < CURDATE() - INTERVAL 30 DAY
WHERE r.user_id IS NULL
)