【问题标题】:MySQL select within if statement in procedureMySQL在过程中的if语句中选择
【发布时间】:2021-04-04 05:49:40
【问题描述】:

我必须创建一个使用外键插入行的过程。该键是另一个表中满足条件的随机id,如果没有满足它的行,则它将是表中所有id中的随机id。

例如,我想创建一个 Person 并且我想为他分配一辆汽车。我希望他的汽车是从特定颜色中随机选择的,但如果没有该颜色的汽车,则只需选择随机汽车。

这是我改编的当前代码:

DELIMITER //
DROP PROCEDURE IF EXISTS `test`;
CREATE PROCEDURE `test`( `id_color` INT )
BEGIN
    # I have auto increment id    
    INSERT INTO persons(id_color)
    VALUES ((
        SELECT IF((SELECT COUNT(*) FROM cars WHERE color = id_color) > 0, 
        SELECT car_id FROM cars WHERE color = id_color ORDER BY RAND() LIMIT 1,
        SELECT car_id FROM cars ORDER BY RAND() LIMIT 1)
    ));
    
END //
DELIMITER ; 

我收到此错误:'2014 命令不同步;你现在不能运行这个命令'

不知道能不能这样。

我使用分隔符是因为我必须添加更多内容。

【问题讨论】:

    标签: mysql sql random sql-order-by sql-insert


    【解决方案1】:

    你可以这样做:

    INSERT INTO persons(id_color)
    SELECT car_id 
    FROM cars 
    ORDER BY (color = id_color) DESC, RAND() 
    LIMIT 1
    

    第一个排序条件首先打印具有给定颜色的汽车(如果有)。第二个标准对组进行洗牌。

    令我惊讶的是,插入不涉及另一列,通常用于存储分配给汽车的人。

    【讨论】:

    • 感谢您的回答!此插入只是一个示例,因为它比我当前的脚本更容易理解。
    猜你喜欢
    • 2018-08-27
    • 2013-07-05
    • 2020-07-21
    • 2017-08-13
    • 1970-01-01
    • 2017-12-05
    • 2016-06-09
    • 1970-01-01
    • 2013-03-14
    相关资源
    最近更新 更多