2016-10-17 77 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