声明一个字符串被传递到SQL查询
问题描述:
我有一个字符串列表,我想在SQL查询中多次传递。声明一个字符串被传递到SQL查询
我想声明一次,然后将列表传递给查询。这可能吗?
值:查询
'1-PGB4Z', '1-PGAT6', '1-PGB55', '1-PGB52',
'1-2SS1E6', '1-2SS1E3', '1-2RZQMZ', '1-2RZQNF', '1-2RZQMT', '1-2SACTZ',
'1-2S0GNR', '1-2S0GLP', '1-2S0GCN', '1-1VOMUX', '1-1VOMV0', '1-1VOMV3',
'1-1VOX7Z', '1-1VOX82', '1-1VOMV7', '1-1VOMVA', '1-1VOMVD', '1-1VOMVG',
'1-1VPMBV', '1-1VPMBY', '1-1VPMC4', '1-1VO9XD', '1-1VO9XG', '1-1VO9XJ',
'1-1VPMBY', '1-1VO9XJ', '1-1VO9XM', '1-1VO9Z6', '1-16PGRE',
'1-16PGRK', '1-16PGRH', '1-8MNWB', '1-9JAVH', '1-8ISTX', '1-N5KYK',
'1-KZMMH', '1-D7KG9', '1-9HCNP', '1-9H81K', '1-1C9F1P', '1-QBQQW',
'1-2S0F1P', '1-2S0F45', '1-2S17LK', '1-2S17LT', '1-2SL5D9', '1-2SDUQD'
部分:
select * from table1 t3
where
and t1.cse_id in
(select d.cse_id
from table1 d
where d.cse_employee_number in
(select substr(t2.emp_s3_id, 3,8) from table2 t2, table 3 T1
where t2.fk_resource_group_id = t1.resource_group_id
and t1.resource_group_id in (
'1-PGB4Z', '1-PGAT6', '1-PGB55', '1-PGB52',
'1-2SS1E6', '1-2SS1E3', '1-2RZQMZ', '1-2RZQNF', '1-2RZQMT', '1-2SACTZ',
'1-2S0GNR', '1-2S0GLP', '1-2S0GCN', '1-1VOMUX', '1-1VOMV0', '1-1VOMV3',
'1-1VOX7Z', '1-1VOX82', '1-1VOMV7', '1-1VOMVA', '1-1VOMVD', '1-1VOMVG',
'1-1VPMBV', '1-1VPMBY', '1-1VPMC4', '1-1VO9XD', '1-1VO9XG', '1-1VO9XJ',
'1-1VPMBY', '1-1VO9XJ', '1-1VO9XM', '1-1VO9Z6', '1-16PGRE',
'1-16PGRK', '1-16PGRH', '1-8MNWB', '1-9JAVH', '1-8ISTX', '1-N5KYK',
'1-KZMMH', '1-D7KG9', '1-9HCNP', '1-9H81K', '1-1C9F1P', '1-QBQQW',
'1-2S0F1P', '1-2S0F45', '1-2S17LK', '1-2S17LT', '1-2SL5D9', '1-2SDUQD',
'1-2SDUTD', '1-2FRRMN', '1-2GHUNX', '1-2FXDD6', '1-2FWFG1', '1-2FR8CR',
'1-2FWFLM', '1-2FH7YL', '1-2FRRMX', '1-2GDIE3', '1-2FWFQI', '1-2FWFNL',
'1-2U9ULR', '1-2U4ZZP', '1-2SC2WF', '1-2SXPKJ', '1-2TDSJ5')
答
倒不如将这些值存储在“查找”表,并以此作为你的查询中的条件。如果这些值发生变化,那么您就不必经历更新使用它们的任何存储过程的麻烦。
例如
select * from table1 t3
where
and t1.cse_id in
(select d.cse_id
from table1 d
where d.cse_employee_number in
(select substr(t2.emp_s3_id, 3,8) from table2 t2, table 3 T1
where t2.fk_resource_group_id = t1.resource_group_id
and t1.resource_group_id in (SELECT value from lookup table)
据我所知,没有办法直接创建一个变量,它是一个数组,但你可以创建可与其他功能使用VARCHAR的变量模拟搜索数组。然而,这将不是一个IN
声明
答
内直接工作,如果这是“永久性”的价值观,填写表格与他们参加吧
答
这是不可能的定义逗号分隔值,并把它们作为IN( )声明(不起作用)。 临时表是唯一的解决方案。
答
方式1:
ChrisBint是对的。相反(val1,val2,val3)可以使用(SELECT val FROM vals_tbl),并将vals存储在vals_tbl中。
这是更好的方法。
方式2:
CREATE PROCEDURE exe_str(command TINYTEXT)/*exec the string*/
BEGIN
PREPARE stmt1 FROM command;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END
现在,您可以创建SELECT语句的字符串,并执行它:
SET @str1="SELECT .........";
SET @str2="'1-PGB4Z', '1-PGAT6'........";
SET @str3=");";
CALL exe_str(CONCAT(@str1,@str2,str3));
我建议第一种方式。
传递给存储过程? – Magnus