大佬们问个SQL的问题

数据库为:sqlservice 

SQL为:

select z0.csid,z0.cs

,z1.XX,z2.YY

from (

select csid,cs 

from V_HR_ORG_TREE_ZUFA

where org_type='城市公司'

) z0


left join (

select csid,cs,RAND()*1000 as XX 

from V_HR_ORG_TREE_ZUFA

where org_type='城市公司'

) z1 on z1.csid=z0.csid


left join (

select csid,cs,RAND()*2000 as YY  

from V_HR_ORG_TREE_ZUFA

where org_type='城市公司'

) z2 on z2.csid=z0.csid


用的RAND()函数但是为什么随机的数都是一致的......


image.png


RAND()放到外边还是不行

image.png


不用子查询结果也是一样的。。。。。。。。。

image.png

哭了T^T

Mimm 发布于 2020-6-11 10:42 (编辑于 2020-6-11 14:06)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
spylLv5见习互助
发布于2020-6-11 14:08

直接rand()一次查询的rand随机数是一样的。你把RAND() 改为 rand(checksum(newid()))  试试

最佳回答
0
zsh331Lv8专家互助
发布于2020-6-11 10:57(编辑于 2020-6-11 14:06)
SELECT z0.csid,
       z0.cs,
       RAND() AS XX,
       RAND() AS YY
FROM
  (SELECT csid,
          cs
   FROM V_HR_ORG_TREE_ZUFA
   WHERE org_type='城市公司' ) z0
LEFT JOIN
  (SELECT csid,
          cs
   FROM V_HR_ORG_TREE_ZUFA
   WHERE org_type='城市公司' ) z1 ON z1.csid=z0.csid
LEFT JOIN
  (SELECT csid,
          cs
   FROM V_HR_ORG_TREE_ZUFA
   WHERE org_type='城市公司' ) z2 ON z2.csid=z0.csid



SELECT z0.csid,
       z0.cs,
       RAND(z0.csid) AS XX,
       RAND(z0.csid) AS YY
FROM
  (SELECT csid,
          cs
   FROM V_HR_ORG_TREE_ZUFA
   WHERE org_type='城市公司' ) z0
LEFT JOIN
  (SELECT csid,
          cs
   FROM V_HR_ORG_TREE_ZUFA
   WHERE org_type='城市公司' ) z1 ON z1.csid=z0.csid
LEFT JOIN
  (SELECT csid,
          cs
   FROM V_HR_ORG_TREE_ZUFA
   WHERE org_type='城市公司' ) z2 ON z2.csid=z0.csid


image.png

  • Mimm Mimm(提问者) 还是一样的。。。。。
    2020-06-11 11:03 
  • zsh331 zsh331 回复 Mimm(提问者) 上面的二个再试试!
    2020-06-11 14:00 
最佳回答
0
liuxqLv4见习互助
发布于2020-6-11 11:04(编辑于 2020-6-11 11:21)

你查的是同一张表,就是加两列随机数,没必要左联两次

SQL为: 

select 

z0.csid,

z0.cs,

RAND() * 1000 AS XX,

RAND() * 2000 AS YY

from (

select csid,cs 

from V_HR_ORG_TREE_ZUFA

where org_type='城市公司'

) z0

image.png

  • Mimm Mimm(提问者) RAND()放到外边结果还是一样的。。。
    2020-06-11 11:08 
  • liuxq liuxq 回复 Mimm(提问者) 不用子查询 select csid, cs, RAND() * 1000 AS XX, RAND() * 2000 AS YY from V_HR_ORG_TREE_ZUFA where org_type=\'城市公司\'
    2020-06-11 11:14 
  • Mimm Mimm(提问者) 回复 liuxq 哭了,还是一样的。。。。。
    2020-06-11 11:15 
  • liuxq liuxq 回复 Mimm(提问者) 你的是什么数据库,我用MySQL查询是不一样
    2020-06-11 11:21 
  • Mimm Mimm(提问者) 回复 liuxq 用的SQLservice数据库
    2020-06-11 11:21 
最佳回答
0
卫九星Lv4初级互助
发布于2020-6-11 14:26

select 

csid,

cs ,

RAND()*1000 as XX 

RAND()*1000 as yy 

from V_HR_ORG_TREE_ZUFA

where org_type='城市公司'


最佳回答
0
Ethan_12Lv6见习互助
发布于2020-6-11 14:33

请看官方文档的解释

对于一个连接,如果使用指定的种子值调用 RAND(),则 RAND() 的所有后续调用将基于使用该指定种子值的 RAND() 调用生成结果。 

不知道你随机列的意义是什么,用newid()可以获得随机数,但不是数字格式



  • 6关注人数
  • 623浏览人数
  • 最后回答于:2020-6-11 14:33
    请选择关闭问题的原因
    确定 取消
    返回顶部