mysql 只计算连接查询中的不同值

Posted

技术标签:

【中文标题】mysql 只计算连接查询中的不同值【英文标题】:mysql count only for distinct values in joined query 【发布时间】:2009-02-03 20:06:02 【问题描述】:

哇!这是一个奇怪的标题,但我很高兴你在看,因为我找不到另一种说法。

我有一张人员表和一张照片和视频链接表。 我把人们加入媒体,当然一个人可以拥有不止一种媒体。

我试图在一个查询中获取前 30 个人及其所有媒体,但是当我说 LIMIT 0,30 时。当然我只会得到前 30 个媒体文件,可能是 10 个人。

在进行查询之前,我不知道每个人将拥有多少媒体文件。有没有办法说 LIMIT DISTINCT(uid 0,30)????

或者类似的?

【问题讨论】:

【参考方案1】:

您可以在您的 mysql 版本中使用子查询吗?

select *
from media m
inner join
     ( select uid
     from users_tbl
     limit 0,30) map
  on map.uid = m.uid
inner join users_tbl u
  on u.uid = m.uid

【讨论】:

如果您可以使用子查询,这就是这样做的方法。好答案AviewAnew。 感谢 AvewAnew,仍在学习我的内在和外在,我认为它必须是这样的。还没有让它完美地工作,但多亏了你,我走在了正确的轨道上。 自 2004 年 10 月 23 日以来,MySQL 4.1 在一般版本中支持子查询。那是四年多以前的事了!【参考方案2】:

FWIW,这是另一个应该返回相同结果的查询:

SELECT *
FROM media m INNER JOIN users_tbl u USING (uid)
WHERE u.uid IN (SELECT uid FROM users_tbl ORDER BY uid LIMIT 0,30);

请注意,当您使用LIMIT 时,您应该始终使用ORDER BY。否则无法保证您将获得 30 个用户。

【讨论】:

以上是关于mysql 只计算连接查询中的不同值的主要内容,如果未能解决你的问题,请参考以下文章

mysql左连接右连接(查询两张表不同的数据)

Mysql优化系列之——优化器对子查询的处理

Mysql数据库连接查询

大查询:使用函数结果连接(错误:连接谓词中的子查询应该只依赖于一个连接端。)

mysql查询基础

mysql 自连接查询