假设我有以下表格:
表:主题
列: topicId
表: topicPermissions
列: topicId、teamId
我想写一个查询,提取10个唯一的主题id及其所有相关的权限行。每个主题id可以有多个topicPermission行分配给它,但我只需要10个不同的主题id。
SELECT topic.topicId, topicPermission.teamId FROM topic LEFT JOIN topicPermissions ON topicId LIMIT 10显然,这不起作用,因为它将其限制为10行。感谢您的帮助。
进一步澄清一下:另一种方法是不断从主题权限中提取行,直到主题权限有10个不同的主题id。这可能吗?
谢谢。
发布于 2012-02-02 10:51:32
这可能会起作用:
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条记录:
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:
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)结果是:
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,您可以更改下面的派生表查询,以读取所需的主题:
SELECT `topicId` FROM `topic` LIMIT 10;发布于 2012-02-02 09:28:10
这样如何..。
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编写的,所以您可能需要更改一些语法。
https://stackoverflow.com/questions/9105858
复制相似问题