IN 子句对我来说在 MySQL 中不起作用



我将参数传递为"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/中评论的那样,并且回答反映了类似的编码,

成功了!

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

哎呀,谢谢你们!!

在这种情况下,

您将无法使用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 演示

试试这个:

没有必要使用PREPARE STATEMENT.您可以使用FIND_IN_SET()函数获得结果

SELECT * FROM vicidial_log WHERE FIND_IN_SET(campaign_id, Campaign)

试试这个

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

而不是

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

相关内容

  • 没有找到相关文章

最新更新