从一个随机列MySQL中选择2个随机记录

时间:2019-04-02 14:36:24

标签: mysql

从随机列中选择2条随机记录时,我从不同随机列中获得2条记录

我的桌子

id  | name1 |  name2  | name3 
------------------------------
1    user1     test1      pr1        
2    user2     test2      pr2   
3    user3     test3      pr3   
.............................
n    userN     testN      prN   
SELECT CASE FLOOR(RAND()*3+1)
                     WHEN 1 THEN name1 
                     WHEN 2 THEN name2
                     WHEN 3 THEN name3
                     END AS name
            FROM names ORDER BY RAND() limit 2

我得到这样的结果:

|name|
----
user1
pr1

但是我需要:

|name|
----
user1
userN

|name|
----
pr2   
pr5

预先感谢您的回答

2 个答案:

答案 0 :(得分:1)

尝试这个:

SELECT
  CASE x.r
    WHEN 1 THEN name1 
    WHEN 2 THEN name2
    WHEN 3 THEN name3
  END AS name
FROM names
CROSS JOIN (SELECT FLOOR(RAND()*3+1) as r) x
ORDER BY RAND() limit 2

Demo

由于FROM子句(CROSS JOIN)中的子查询仅被评估一次,因此您将获得一个介于1和3之间的随机值,而不是两个不同的值。这样一来,您总是会从同一(随机)列中获得两个随机行,并带有一个值。

答案 1 :(得分:1)

您可以使用如下查询:

SELECT CASE @COLNR
        WHEN 1 THEN name1 
        WHEN 2 THEN name2
        WHEN 3 THEN name3
    END AS name
FROM names
CROSS JOIN ( SELECT @COLNR := FLOOR(RAND()*3+1) ) AS INIT
ORDER BY RAND() 
LIMIT 2;

或者这样:它将获得最大的行数

SELECT CASE @COLNR
        WHEN 1 THEN name1 
        WHEN 2 THEN name2
        WHEN 3 THEN name3
    END AS name
FROM names
CROSS JOIN ( SELECT FLOOR( RAND() * COUNT(*)+1) INTO @COLNR from names ) AS INIT
ORDER BY RAND() 
LIMIT 2;