如何在存储在其他表mysql中的查询中应用where条件

hmtdttj4  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(321)

我有一个需求,我将获取存储在其他表中的where条件 id > 10 或者 amount < 100 .
我使用存储过程来执行一些任务,在其中检索这个where条件并使用它向表中插入一些数据。但它不起作用,可能是因为撇号被附加在前面和后面。

set @whereC = (select FilterCondition from SearchLeads where `SearchLeadID` = sid);
INSERT INTO `JTemporary` 
        (`ZipID`,`FirstName`,`LastName`,`MemberSince`,
        `Address1`,`Phone`,`Email`,`CompanyName`,
        `BusPhone`,`Deleted`,`CreatedBy`,`CreateDate`,
        `UpdatedBy`,`UpdateDate`)
  select `ZipCode`,`FirstName`,`LastName`,`AddDate`,
        `AddressLine1`,`HomePhone`,`HomeEmail`,`Employer`,
        `BusinessPhone`,'N',loginUserID,now(),
        loginUserID,now() 
    from membertrans where @whereC;

这不管用。当我通过复制那个条件并替换变量来直接应用时,它可以工作,但不能处理变量。
如何做到这一点?

2skhul33

2skhul331#

您尚未将任何列置于要与select query column filtercondition匹配的where条件中。如。

set @whereC = (select FilterCondition from SearchLeads where `SearchLeadID` = sid);
INSERT INTO `JTemporary` 
        (`ZipID`,`FirstName`,`LastName`,`MemberSince`,
        `Address1`,`Phone`,`Email`,`CompanyName`,
        `BusPhone`,`Deleted`,`CreatedBy`,`CreateDate`,
        `UpdatedBy`,`UpdateDate`)
  select `ZipCode`,`FirstName`,`LastName`,`AddDate`,
        `AddressLine1`,`HomePhone`,`HomeEmail`,`Employer`,
        `BusinessPhone`,'N',loginUserID,now(),
        loginUserID,now() 
    from membertrans where**filterColumn**IN (or any other clause) @whereC;

我认为这就是问题所在,试试这个也许这会对你有所帮助。

ilmyapht

ilmyapht2#

下面是一个在mysql数据库上运行的示例。

CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(whereClause varchar(512))
BEGIN
SET @str = concat('SELECT * from mytable where ',whereClause);
PREPARE myquery FROM @str;
EXECUTE myquery;
END

我可以把上面的传递称为where子句。

call test ('col1 between 5 and 10 and col2=''a bit of text''')

这里的关键显然是set/prepare/execute,这是您需要做的。
我用了这个问题:在mysql中是否可以执行一个字符串?因为我自己的所有示例都是在SQLServer中,所以要推导出上面的一些公式。

相关问题