【问题标题】:How to union select with random and limit如何与随机和限制联合选择
【发布时间】:2019-12-21 12:42:56
【问题描述】:

我正在尝试随机化我的训练数据或机器学习。在我的表中有一个只保存两个值“A”和“B”的列。但是当我使用随机查询时,显示的两个值都不相等,并且我的代码不起作用。如何解决这个问题?我在 MySQL 上真的很糟糕 T.T

我在 XAMPP 上使用 MySQL

SELECT * FROM
(
      (SELECT * FROM table WHERE table.category = 'A' LIMIT 10) as t1
      UNION ALL
      (SELECT * FROM table WHERE table.category = 'A' LIMIT 10) as t2
)ORDER BY RAND()

您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取在 'as t2 附近使用的正确语法 ) ORDER BY RAND() LIMIT 0, 25' at line 5

【问题讨论】:

    标签: mysql database select random union


    【解决方案1】:

    您不能为UNION 中的表指定别名,只能在FROMJOIN 中指定别名。所以使用

    SELECT * FROM (
        (SELECT * FROM table1 WHERE table1.category = 'A' LIMIT 10)
        UNION ALL
        (SELECT * FROM table1 WHERE table1.category = 'B' LIMIT 10)
    ) AS t1
    ORDER BY RAND()
    

    DEMO

    【讨论】:

    • 谢谢,但现在我仍然无法显示我想要的结果。从您的代码中,结果仅显示 B 类的 10 行,但随机。但我也想随机显示 10 行类别 A。你能解决这个问题吗?
    • 我添加了一个 db-fiddle 演示。
    • 您问题中的代码在两个子查询中具有相同的类别。确保您在测试时不要犯同样的错字。
    • 谢谢,它的工作哈哈哈但我仍然不知道为什么它不工作。非常感谢
    • 我在第一行解释了原因。您在 UNION 查询中有 AS t1AS t2,这是不允许的。
    猜你喜欢
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2014-03-31
    • 2017-02-15
    • 2013-01-26
    • 2013-07-19
    • 2017-01-10
    • 1970-01-01
    相关资源
    最近更新 更多