我可以在mysql中的WHERE中执行选择吗?
我试图在where子句中执行select 基本上,我有很多用户,并试图看看哪些是活跃的。活动表示他们在过去30天内记录了活动。但是,如果我将用户表与活动表连接起来,则会得到重复的用户ID(因为每个用户可能记录了多个操作) 所以我想在一个列表中加入一个select,检查每个用户至少有一个操作我可以在mysql中的WHERE中执行选择吗?,mysql,Mysql,我试图在where子句中执行select 基本上,我有很多用户,并试图看看哪些是活跃的。活动表示他们在过去30天内记录了活动。但是,如果我将用户表与活动表连接起来,则会得到重复的用户ID(因为每个用户可能记录了多个操作) 所以我想在一个列表中加入一个select,检查每个用户至少有一个操作 SELECT u FROM `users` u where ( select count(*) FROM `user_activity` ua where ua.user_id = u.user_id and
SELECT u FROM `users` u
where (
select count(*) FROM `user_activity` ua
where ua.user_id = u.user_id and ua.last_login between "2012-04-01 00:00:00" and "2012-04-30 23:59:59"
) >= 1
感谢@Ami在子查询中指出了大约限制1
,这可能会稍微提高性能
感谢@Ami在子查询中指出了大约
限制1
,这可能会稍微提高性能是的,您可以在where子句中嵌套select,如下所示:
SELECT * FROM mytable WHERE users in(SELECT users FROM user_activity);
但我认为不能在where子句中嵌套像count(*)这样的聚合函数。所以我会先尝试这个,然后是聚合函数,但是尝试在没有聚合的情况下编写select。我面前没有您的数据,因此我无法帮忙。是的,您可以在where子句中嵌套select,如下所示:
SELECT * FROM mytable WHERE users in(SELECT users FROM user_activity);
但我认为不能在where子句中嵌套像count(*)这样的聚合函数。所以我会先尝试这个,然后是聚合函数,但是尝试在没有聚合的情况下编写select。我面前没有您的数据,因此我无法帮忙。是的,您可以在WHERE子句中添加SELECT 我会避免使用关联子查询来查看它是否提高了性能:
SELECT DISTINCT `user`
FROM users u
JOIN user_activity ua
ON ua.user_id = u.user_id
AND ua.last_login BETWEEN '2012-04-01 00:00:00' AND '2012-04-30 23:59:59'
是的,您可以在WHERE子句中放置SELECT 我会避免使用关联子查询来查看它是否提高了性能:
SELECT DISTINCT `user`
FROM users u
JOIN user_activity ua
ON ua.user_id = u.user_id
AND ua.last_login BETWEEN '2012-04-01 00:00:00' AND '2012-04-30 23:59:59'
所以这里的问题是你面临的问题是什么?你不应该做这个把戏吗?那么这里的问题是你面临的问题是什么?你不应该做这个把戏吗?将
限制1
添加到相关子查询会使它执行得更好吗?@zerkms你为什么要利用选择
,限制
和自
而非其中
,和
之间的?奇怪…@Flukey:大写-这是我写的。其他部分按原样取用。太无聊了,无法重新格式化整个OP的查询。PS:查看问题中的原始查询将限制1
添加到相关子查询中会使其性能更好吗?@zerkms为什么将选择
、限制
和从
添加到而不是其中
、和之间
?奇怪…@Flukey:大写-这是我写的。其他部分按原样取用。太无聊了,无法重新格式化整个OP的查询。PS:查看问题中的原始查询DISTINCT
不能应用于整个表,但DISTINCT u.*
可以工作。PS:只要OP只需要有活动的用户-内部连接
就是您想要编写的内容当前查询产生错误1054(42S22):“字段列表”中的未知列“u”
@zerkms,谢谢,我捕获了内部连接。奇怪的是,我们有一个列u
与表别名u
命名相同,但MySQL没有抱怨。第一个u
是列。哦,对了,OP在问题中有SELECT u
,但我打赌他的意思是u.
DISTINCT
不能应用于整个表,但是DISTINCT u.
可以工作。PS:只要OP只需要有活动的用户-内部连接
就是您想要编写的内容当前查询产生错误1054(42S22):“字段列表”中的未知列“u”
@zerkms,谢谢,我捕获了内部连接。奇怪的是,我们有一个列u
与表别名u
命名相同,但MySQL没有抱怨。第一个u
是列。哦,对了,OP在问题中选择了u
,但我打赌他指的是u.*