【发布时间】:2011-04-06 08:48:40
【问题描述】:
我有一个嵌入 Flash 游戏的 Drupal 网站。
已注册的网站用户列在 drupal_users 表中 - 这里是一周前注册的用户列表:
# select uid, created from drupal_users where
to_timestamp(created) < (now() - interval '7 days') limit 5;
uid | created
------+------------
9903 | 1300257067
9904 | 1300259929
9750 | 1299858284
9751 | 1299858603
8083 | 1285514989
(5 rows)
Flash 游戏用户列在另一个表中 - pref_users 并在他们的 ID 前加上“DE”字符串:
# select id from pref_users where id like 'DE%' limit 5;
id
--------
DE9054
DE9055
DE9056
DE9057
DE9058
(5 rows)
我想摆脱一周前在我的网站上注册但仍未玩 Flash 游戏的(可能是垃圾邮件机器人)用户。 IE。我想删除 pref_users 表中不存在的 drupal_users 记录。
同时我不想做这样的事情:
# delete from drupal_users where
to_timestamp(created) < (now() - interval '7 days') and
'DE'||uid not in (select id from pref_users where id like 'DE%');
因为我不确定,上面的 select 语句允许有多大(也许有限制?我使用的是 PostgreSQL 8.4.7 和 CentOS 5.5/64 位。在 Drupal7 之前,我使用的是 phpBB3,有时从 phpBB3 管理控制台删除旧论坛帖子时,我看到这种 SQL 语句失败)。
所以我的问题是,上面的语句是否可以改写为some kind of SQL-join?
【问题讨论】:
标签: postgresql join sql-delete