嘿,我有以下问题:
SELECT REPLACE(REPLACE(REPLACE(REPLACE(tmpTable.Caller_Number,'-',''),'(',''),')',''),' ','')
FROM tmpTable
WHERE EXISTS
(SELECT REPLACE(REPLACE(REPLACE(REPLACE(OnlineAppDetails.addPhone,'-',''),'(',''),')',''),' ','')
FROM OnlineAppDetails
WHERE OnlineAppDetails.addPhone = tmpTable.Caller_Number)
ORDER BY GroupsBy ASC;
它不返回任何记录......但是,当我执行此查询时:
SELECT *
FROM tmpTable
WHERE EXISTS
(SELECT * FROM OnlineAppDetails
WHERE SUBSTRING(OnlineAppDetails.addPhone,2,3)+'-'+SUBSTRING(OnlineAppDetails.addPhone,7,4)+SUBSTRING(OnlineAppDetails.addPhone,11,4) = tmpTable.Caller_Number)
ORDER BY GroupsBy ASC;
它返回记录..
phome编号的格式如下:
for OnlineAppDetails: (xxx) xxx-xxxx
for tmpTable: xxx-xxx-xxxx
我正在做的就是取出电话号码中的 - ()和[空格] ,以确保我能够归还所有我应该记录的记录。我知道两个表中都有匹配,因此取出 - ()和[space] 仍然会导致返回记录。
更新
Duh ....知道这很简单。
SELECT *
FROM tmpTable
WHERE EXISTS
(SELECT *
FROM OnlineAppDetails
WHERE REPLACE(REPLACE(REPLACE(REPLACE(OnlineAppDetails.addPhone,'-',''),'(',''),')',''),' ','') = REPLACE(REPLACE(REPLACE(REPLACE(tmpTable.Caller_Number,'-',''),'(',''),')',''),' ',''))
ORDER BY GroupsBy ASC;
答案 0 :(得分:1)
确保第一个查询不会返回任何行:
这是因为,内部查询的WHERE OnlineAppDetails.addPhone = tmpTable.Caller_Number
部分将产生零行(给定相应字段的期望格式),因此EXISTS将始终为假。
注意BTW,在 SELECT 部分(实际上是任何)EXISTS子查询中完成的字符串操作不会对EXISTS谓词的结果产生任何影响;这就是为什么使用的习语通常是:... WHERE EXISTS * FROM ...
。
第二个查询查询有效,因为在WHERE子句中应用了字符串转换。此转换使OnlineAppDetails.addPhone值具有与tmpTable.Caller_Number格式相同的格式,因此提供了查找匹配的机会。