我有一些像这样的MySQL功效:
---------------------------
| name | something_random |
---------------------------
| john | ekjalsdjalfjkldd |
| alex | akjsldfjaekallee |
| alex | jkjlkjslakjfjflj |
| alex | kajslejajejjaddd |
| bob | ekakdie33kkd93ld |
| bob | 33kd993kakakl3ll |
| paul | 3k309dki595k3lkd |
| paul | 3k399kkfkg93lk3l |
etc...
这一连了1000行的功效.我必要将功效数目限定为前50个独一名称.我以为有一个简朴的办理方案,但我不确定.
我已经实行行使派生表和变量,但不能完全到达目标.假如每次名称差异时我能弄清晰怎样增进一个变量,我想我可以说WHERE变量< = 50.
更新
我已经实行了下面提议的内部毗连要领.题目是这样的:
子选择SELECT DISTINCT name FROM testTable LIMIT 50获取前50个差异的名称.大概我在原帖中不足清晰,但这限定了我的查询太多了.在我的查询中,并非功效中返回表中的每个名称.让我修改我原本的例子:
----------------------------------
| id | name | something_random |
----------------------------------
| 1 | john | ekjalsdjalfjkldd |
| 4 | alex | akjsldfjaekallee |
| 4 | alex | jkjlkjslakjfjflj |
| 4 | alex | kajslejajejjaddd |
| 6 | bob | ekakdie33kkd93ld |
| 6 | bob | 33kd993kakakl3ll |
| 12 | paul | 3k309dki595k3lkd |
| 12 | paul | 3k399kkfkg93lk3l |
etc...
以是我在这里添加了一些身份证号码.这些ID号码与表格中的人名相干.因此,您可以在功效中看到,并非表中的每小我私人/名都必需在功效中(因为某些WHERE前提).因此,列表中的第50个差异名称将始终具有高于49的ID号.第50小我私人可所以id 79,234,4954等…
以是回到题目地址.子选择SELECT DISTINCT name FROM testTable LIMIT 50选择表中的前50个名称.这意味着我的搜刮功效将仅限于ID <= 50的名称,这个名称太缩短了.假如某些名称未在查询中表现(因为某些WHERE前提),则它们仍被视为50个差异名称之一.以是你获得的功效太少了.
更新2
致@trapper:这是我的查询的根基简化:
SELECT
t1.id,t1.name,t2.details
FROM t1
LEFT JOIN t2 ON t1.id = t2.some_id
INNER JOIN
(SELECT DISTINCT name FROM t1 ORDER BY id LIMIT 0,50) s ON s.name = t1.name
WHERE
SOME CONDITIONS
ORDER BY
t1.id,t1.name
我的功效看起来像这样:
----------------------------------
| id | name | details |
----------------------------------
| 1 | john | ekjalsdjalfjkldd |
| 3 | alex | akjsldfjaekallee |
| 3 | alex | jkjlkjslakjfjflj |
| 4 | alex | kajslejajejjaddd |
| 6 | bob | ekakdie33kkd93ld |
| 6 | bob | 33kd993kakakl3ll |
| 12 | paul | 3k309dki595k3lkd |
| 12 | paul | 3k399kkfkg93lk3l |
...
| 37 | bill | kajslejajejjaddd |
| 37 | bill | ekakdie33kkd93ld |
| 41 | matt | 33kd993kakakl3ll |
| 50 | jake | 3k309dki595k3lkd |
| 50 | jake | 3k399kkfkg93lk3l |
----------------------------------
功效在id = 50处遏制.列表中没有50个差异的名称.只有约莫23个差异的名字.
最佳谜底
我的MySql语法也许生锈,但设法是行使查询来选择前50个差异的名称,然后在名称长举办自联接并从联接中选择名称和其他信息.
select a.name,b.something_random
from Table b
inner join (select distinct name from Table order by RAND() limit 0,50) a
on a.name = b.name
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|