2016-10-17 78 views
0

我有一个名为NAMES_INFO具有以下字段SQL查询处理变量

ID 
NAME 
ALTERNATIVE_NAME 
PREFERED_NAME 
REPORTING_NAME 
ALAIS_NAME 

现在我有一个需要检查对每个领域上面有NAMES检查的NAMES一个新的列表中的表MATCH。所以我想出了以下的SQL

SELECT * 
FROM NAMES_INFO 
WHERE ALTERNATIVE_NAME LIKE '%PETER%THOMAS%' 
OR PREFERED_NAME LIKE '%PETER%THOMAS%' 
OR REPORTING_NAME LIKE '%PETER%THOMAS%' 
OR ALAIS_NAME LIKE '%PETER%THOMAS%'; 

其中预计工作。但是我有3000个需要在Excel文件中检查的名称。所以只需检查是否有更新可以处理变量并运行它的SQL的方法。像下面的东西

VAR1 = '%PETER%THOMAS%' 
PASS TO BELOW SQL 
SELECT * FROM NAMES_INFO WHERE ALTERNATIVE_NAME LIKE 'VAR1' 
OR PREFERED_NAME LIKE 'VAR1' 
OR REPORTING_NAME LIKE 'VAR1' 
OR ALAIS_NAME LIKE 'VAR1'; 

我不能在数据库中创建任何对象。我必须在只读环境中执行此操作。

+0

你在使用哪个平台? – Hogan

回答

1

记住在SQL中,你不会做循环,而是你做套或表。所以用值表来检查你只需要一个连接。

我不知道你用的是什么平台,但这里是示例代码:

-- Oracle 
WITH names2check(C) AS 
(
    SELECT '%PETER%THOMAS%' as C FROM DUAL 
    UNION ALL 
    SELECT '%SECOND%FIDDLE%' as C FROM DUAL 
    UNION ALL 
    SELECT '%GENERIC%ALL%' as C FROM DUAL 
    -- etc 
    UNION ALL 
    SELECT '%LAST%McLAST%' as C FROM DUAL 
) 
SELECT * 
FROM NAME_INFO 
JOIN names2check ON 
    ALTERNATIVE_NAME LIKE names2check.C 
OR PREFERED_NAME LIKE names2check.C 
OR REPORTING_NAME LIKE names2check.C 
OR ALAIS_NAME LIKE names2check.C; 

-- DB2 or MS SQL 
WITH names2check(C) AS 
(
    VALUES 
    ('%PETER%THOMAS%'), 
    ('%SECOND%FIDDLE%'), 
    ('%GENERIC%ALL%'), 
    -- etc 
    ('%LAST%McLAST%') 
) 
SELECT * 
FROM NAME_INFO 
JOIN names2check ON 
    ALTERNATIVE_NAME LIKE names2check.C 
OR PREFERED_NAME LIKE names2check.C 
OR REPORTING_NAME LIKE names2check.C 
OR ALAIS_NAME LIKE names2check.C; 
+0

正在使用Oracle –

+0

正在为Oracle尝试时出现以下错误 –

+0

ORA-00928:缺少SELECT关键字 –

0

在Oracle中,可以简化使用UNPIVOT

select * 
from names_info 
where id in (
    select id 
    from names_info 
    unpivot (any_column for source_column in (alternative_name, prefered_name, reporting_name, alais_name)) 
    where any_column like '%PETER%THOMAS%' 
); 
+0

真棒这个作品。但它拉动了PETER的所有行。例如,它的名字是PETER,PETER DAVID,PETER THOMAS –

+0

然后继续保持单一模式。尝试%PETER THOMAS% – SriniV