【问题标题】:IN Clause dont work in MySQL for meIN 子句在 MySQL 中对我不起作用
【发布时间】:2023-03-07 17:33:01
【问题描述】:

我将参数传递为 'Suburbun'、'Indigo' 以检索与下面在 MySql 中创建的存储过程中的两个活动匹配的记录。

CREATE PROCEDURE `DemoSP`(Campaign VARCHAR(3000))
BEGIN
    SET @query = CONCAT('Select * from vicidial_log WHERE campaign_id IN (?)');
  PREPARE stmt FROM @query;
  SET @CampaignID = Campaign;
  EXECUTE stmt USING @CampaignID;
  DEALLOCATE PREPARE stmt;
END;

它没有给出任何行!

但是当我在 SP 中只通过“郊区”时,它会给出 6 行!

我哪里错了?

--回答!

我尝试了 Lee Fentress 在http://www.poolofthought.com/index.php/2008/12/28/a-comma-seperated-list-as-parameter-to-mysql-stored-procedure/ 中的评论,peterm 的回答反映了类似的编码,

成功了!

谢谢,但与 SQL Server 相比,我发现这个负面标记。

哎呀,谢谢你们!!

【问题讨论】:

    标签: mysql sql select in-clause find-in-set


    【解决方案1】:

    在这种情况下,您将无法使用 USING。您可以构建完整的查询字符串并在没有参数的情况下执行它

    DELIMITER $$
    CREATE PROCEDURE DemoSP(Campaign VARCHAR(3000))
    BEGIN
      SET @query = CONCAT('SELECT * FROM vicidial_log WHERE campaign_id IN (', Campaign, ')');
      PREPARE stmt FROM @query;
      EXECUTE stmt;
      DEALLOCATE PREPARE stmt;
    END$$
    DELIMITER ;
    

    注意:确保您在Campaign 中传递的分隔值被正确引用(就像您说的那样)并且值中的引号(如果有的话)被转义。

    这里是SQLFiddle演示

    【讨论】:

    • 嘿,彼得,谢谢!!!有效。但是我遇到了类似的事情(请参阅,y更新的问题)。我试过了,它奏效了!非常感谢 SQL Fiddle!帮了我很多!
    【解决方案2】:

    试试这个:

    没有必要使用PREPARE STATEMENT。你可以使用FIND_IN_SET()函数得到结果

    SELECT * FROM vicidial_log WHERE FIND_IN_SET(campaign_id, Campaign)
    

    【讨论】:

    • @Akash 我可以知道您面临的问题吗?
    • 它只是没有用!我的语句 Select * from vicidial_closer_log WHERE FIND_IN_SET(campaign_id, Campaign) 没有返回任何行
    • 为了使FIND_IN_SET()Campaign 参数中使用分隔值,'Suburbun,Indigo' 应不加引号。但是这种方法的主要问题是它会阻止任何索引被有效使用,从而导致每次都进行完整扫描。
    【解决方案3】:

    试试这个

    "Select * from vicidial_log WHERE campaign_id IN ('?')"
    

    而不是

    'Select * from vicidial_log WHERE campaign_id IN (?)'
    

    【讨论】:

    • 这行不通 - 继续尝试。准备好的语句不支持变量数组
    猜你喜欢
    • 2015-07-24
    • 2018-04-23
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多