首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写查询以保持获取行,直到条件饱和

问如何编写查询以保持获取行,直到条件饱和
EN

Stack Overflow用户
提问于 2012-02-02 09:22:03
回答 2查看 104关注 0票数 1

假设我有以下表格:

表:主题

列: topicId

表: topicPermissions

列: topicId、teamId

我想写一个查询,提取10个唯一的主题id及其所有相关的权限行。每个主题id可以有多个topicPermission行分配给它,但我只需要10个不同的主题id。

代码语言:javascript
复制
SELECT topic.topicId, topicPermission.teamId FROM topic LEFT JOIN topicPermissions ON topicId LIMIT 10

显然,这不起作用,因为它将其限制为10行。感谢您的帮助。

进一步澄清一下:另一种方法是不断从主题权限中提取行,直到主题权限有10个不同的主题id。这可能吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-02 10:51:32

这可能会起作用:

代码语言:javascript
复制
SELECT `TP`.`topicId`, `PM`.`teamId`
FROM (SELECT `topicId`
    FROM `topic`
    LIMIT 10
) `TP`
LEFT JOIN `topicPermissions` `PM` ON `TP`.`topicId` = `PM`.`topicId`;

希望它能帮上忙!

EDIT 1:这里是上述查询的测试运行。

表topic有13条记录:

代码语言:javascript
复制
mysql> select * from topic;
+---------+
| topicId |
+---------+
|       1 |
|       2 |
|       3 |
|       4 |
|       5 |
|       6 |
|       7 |
|       8 |
|       9 |
|      10 |
|      11 |
|      12 |
|      13 |
+---------+
13 rows in set (0.00 sec)

表"topicPermissions“有4个条目对应于topicId =1,2个条目对应于topicId = 5:

代码语言:javascript
复制
mysql> select * from topicPermissions;
+---------+--------+
| topicId | teamId |
+---------+--------+
|       1 |      1 |
|       1 |      2 |
|       1 |      3 |
|       1 |      4 |
|       5 |      1 |
|       5 |      9 |
+---------+--------+
6 rows in set (0.00 sec)

结果是:

代码语言:javascript
复制
mysql> SELECT `TP`.`topicId`, `PM`.`teamId`
    -> FROM (SELECT `topicId`
    ->     FROM `topic`
    ->     LIMIT 10
    -> ) `TP`
    -> LEFT JOIN `topicPermissions` `PM` ON `TP`.`topicId` = `PM`.`topicId`;
+---------+--------+
| topicId | teamId |
+---------+--------+
|       1 |      1 |
|       1 |      2 |
|       1 |      3 |
|       1 |      4 |
|       2 |   NULL |
|       3 |   NULL |
|       4 |   NULL |
|       5 |      1 |
|       5 |      9 |
|       6 |   NULL |
|       7 |   NULL |
|       8 |   NULL |
|       9 |   NULL |
|      10 |   NULL |
+---------+--------+
14 rows in set (0.00 sec)

我从您的问题中了解到,该查询为您提供了10个不同的主题id和每个主题id的所有topicPermissions。不是吗?

请注意,如果您需要挑选特定的主题if,您可以更改下面的派生表查询,以读取所需的主题:

代码语言:javascript
复制
SELECT `topicId` FROM `topic` LIMIT 10;
票数 2
EN

Stack Overflow用户

发布于 2012-02-02 09:28:10

这样如何..。

代码语言:javascript
复制
SELECT T.topicId, TP.teamId
from
(
SELECT TOP 10 DISTINCT topicId
FROM topic
) T inner join topicPermissions TP on (TP.topicId = T.topicId)

注意:我是用SQL Server编写的,所以您可能需要更改一些语法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9105858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档