Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在mysql中的WHERE中执行选择吗?_Mysql - Fatal编程技术网

我可以在mysql中的WHERE中执行选择吗?

我可以在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

我试图在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 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.*