2017-10-17 49 views
2

在查询我有这样的一个波纹管的多行语句:如何防止select语句返回输出

set @query = ''; 
select @query := concat(@query, ' union (select \'',bi.param2,'\' as tableName, ',bi.param3,' id, ', bi.param4, ' text from ', bi.param2,' where ',if(TRIM(bi.param5) is null, '1=1', bi.param5),')') 
from itmanagement.BasicInfo bi where bi.param2 != ''; 
set @query := concat(SUBSTR(@query, 7, LENGTH(@query))); 
set @wholeQuery := concat('select pe.*, bi.title label 
, (case when bi.param1 = \'textfield\' then pe.ElemValue else od.text end) text 
from PRC_PcdElements pe join BasicInfo bi on pe.ElemType = bi.InfoID join 
(',@query,") 
od on bi.param2 = od.tableName and pe.ElemValue = od.id 
where bi.TypeID = 3 and pe.ProcedureID = '2';"); 
prepare stmt1 from @wholeQuery ; 
execute stmt1 ; 

该查询返回两列。一个用于第一个select语句,它只是一个赋值语句,而exec语句的输出是所需的语句。

我想要阻止第一个select语句将输出的表打印出来,或者用更好的命令替换它(如果有的话)。

在此先感谢。 TG。

+0

查看https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

回答

1

你可以尝试以下解决方案,使用SELECT ... INTO语法:

SET @query = ''; 
SELECT CONCAT(@query, ' UNION(SELECT \'',bi.param2,'\' AS tableName, ',bi.param3,' id, ', bi.param4, ' text FROM ', bi.param2,' WHERE ', IF(TRIM(bi.param5) IS NULL, '1=1', bi.param5),')') INTO @query 
FROM itmanagement.BasicInfo bi WHERE bi.param2 != '' LIMIT 1; 
SET @query := CONCAT(SUBSTR(@query, 7, LENGTH(@query))); 
SET @wholeQuery := CONCAT('SELECT pe.*, bi.title label 
, (CASE WHEN bi.param1 = \'textfield\' THEN pe.ElemValue ELSE od.text END) text 
FROM PRC_PcdElements pe JOIN BasicInfo bi ON pe.ElemType = bi.InfoID JOIN 
(',@query,") 
od ON bi.param2 = od.tableName AND pe.ElemValue = od.id 
WHERE bi.TypeID = 3 AND pe.ProcedureID = '2';"); 
PREPARE stmt1 FROM @wholeQuery; 
EXECUTE stmt1; 

您可以设置@query变量,这样的声明(无输出):

SELECT column_name INTO @query FROM table_name WHERE condition = true LIMIT 1 
+0

最重要的部分是'LIMIT 1' – ConductedClever

1

您可以创建一个临时tableinsert - select将所需结果加入其中。此外,你可以选择你的查询到游标中,迭代它并建立你需要的变量。

+0

虽然这两个答案都很好,但我可以接受其中的一个。也谢谢你。 – ConductedClever

+1

@ConductedClever欢迎您,很高兴看到您的问题已得到解决。 –