【问题标题】:Mysql random record using joinMysql随机记录使用join
【发布时间】:2021-12-26 01:51:41
【问题描述】:

使用连接查询时如何从特定表中选择随机记录? 我有下面两个表,我想随机选择pid

用户

id   | name.  | uid
-----|--------|-----
1    | Peter  | p1
2    | Hana   | p3
3    | John   | p4
4    | Joe    | p2

包

pid  | tag      | puid
-----|----------|------
1    | PHP      | p1   
2    | JAVA     | p1
3    | CSS      | p2
4    | SQL      | p1
5    | PYTHON   | p3
6    | HTML     | p1
7    | SWIFT    | p1

查询

SELECT u.*, p.*
FROM users u

INNER JOIN packages p
ON u.uid = p.puid

WHERE u.uid = "p1"
ORDER BY RAND()

LIMIT 2

【问题讨论】:

  • 你显示的查询没有做你想做的事?

标签: mysql sql random inner-join


【解决方案1】:

您可以将RAND() 与ROW_NUMBER() 组合在一起以加入一个随机相关行。例如:

with p as (
  select *, row_number() over(partition by puid order by rand()) as rn 
  from packages
)
select *
from users u
left join p on p.puid = u.uid and p.rn = 1

结果:

 id  name   uid  pid   tag     puid  rn   
 --- ------ ---- ----- ------- ----- ---- 
 1   Peter  p1   4     SQL     p1    1    
 2   Hana   p3   5     PYTHON  p3    1    
 3   John   p4   null  null    null  null 
 4   Joe    p2   3     CSS     p2    1    

请参阅DB Fiddle 的运行示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-02
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多