Как применить где условие в запросе, который хранится в другой таблице MySQL - PullRequest
0 голосов
/ 11 октября 2018

У меня есть требование, где я получу, где условие хранится в другой таблице, которая может быть как id > 10 или amount < 100.

Я использую хранимую процедуру для выполнения некоторой задачи, в которой я получаю это гдеи использовать его для вставки некоторых данных в таблицу.Но это не работает, может быть из-за того, что апостроф добавляется в начало и конец.

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;

Это не работает.Когда я применяю непосредственно, копируя это условие и помещая вместо переменной, это работает, но не работает с переменной.

Как этого добиться?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Вот пример, который работает с моей базой данных 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

Я могу назвать вышеприведенное прохождение в любом месте, где мне нравится, например,

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

Ключ, очевидно, здесьSET / PREPARE / EXECUTE, это то, что вам нужно сделать.

Я использовал этот вопрос Можно ли выполнить строку в MySQL? , чтобы получить некоторые из вышеперечисленных,поскольку все мои собственные примеры оказались в SQL Server.

0 голосов
/ 11 октября 2018

вы не поместили ни одного столбца, где условие должно совпадать с выбранным столбцом запроса FilterCondition .Например,

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;

Я думаю, что это проблема, попробуйте, может, это вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...