2015-02-20 4 views
0

В следующих таблицах есть запись «FF Studios», но когда я запускаю запрос, я не вижу записи.Запись существует в обеих таблицах, но исчезает с предложением where

Select * 
from (Select Name, 
       Ref_name, 
       Final_Name = CASE 
          WHEN _Similarity >=0.80 
          and _Match ='Solid Matched' 
          and Owner IS NOT NULL 
          THEN Ref_Name 
          ELSE Name 
          END, 
       Address, 
       City, 
       Province, 
       [Postal Code], 
       Country, 
       Phone, 
       Fax, 
       Owner 
       _Similarity, 
       _Match 
     from Customer_Stage3 
    ) as a 
WHERE a.Final_Name LIKE ('%FF St%') 
    and (a.Final_Name IN (Select Customer_Clean 
          from SFCustomerMerge 
          Group BY Customer_Clean 
          HAVING COUNT(Customer_Clean) > 1 
         ) 
    ) 
order by a._Similarity 

В этом случае существует запись в SFCustomerMerge таблицы и клиента Stage 3, но когда я добавляю первый Где пункт исчезает, и я проверил в запросе

Select Customer_Clean 
from SFCustomerMerge 
Group BY Customer_Clean 
HAVING COUNT(Customer_Clean) > 1 

и запись появляется там тоже.

Что мне не хватает? Я также знаю, что сходство для этой записи - 0,98, совпадение - Solid Matched и Owner не NULL.

+0

Может быть, владелец не 'null' но пустая строка? Попробуйте 'IsNull (владелец, '')! = '''. Или какая-то чувствительная к регистру проблема с 'a.Final_Name' и' Customer_Clean'? – Hockenberry

+0

Я тоже проверил это. Если я изменил AND на OR, это сработает, и я вижу результат. Поэтому это заставило меня подумать, что есть что-то с внутренним запросом. Выберите Customer_Clean ... но я тоже вижу результат. – user2684009

+0

Или имя не совсем то же самое. Например, могут быть нестандартные символы в имени. Вы можете использовать 'ASCII()' для просмотра значений ascii символов. –

ответ

0

Является ли это дополнительной скобкой в ​​предложении WHERE? Вы попробовали:

WHERE a.Final_Name IN (SELECT Customer_Clean 
         FROM SFCustomerMerge 
         GROUP BY Customer_Clean 
         HAVING COUNT(Customer_Clean) > 1) 

Все остальное выглядит хорошо, так что это единственное, что я вижу, что может вызвать это.

0

Я хотел бы начать с просмотра последовательности сортировки, которая используется. чувствительность к регистру может вступить в игру здесь. Далее ... как насчет встроенных пробелов? Это точно так же?

Однако, по причинам производительности, я бы, вероятно, реорганизовать запрос на что-то вроде этого:

select cs3.Name, 
     cs3.Ref_name, 
     cs3.Final_Name = case 
          when _Similarity >=0.80 
          and _Match ='Solid Matched' 
          and Owner IS NOT NULL 
          then Ref_Name 
          else Name 
         end, 
     cs3.Address, 
     cs3.City, 
     cs3.Province, 
     cs3.[Postal Code], 
     cs3.Country, 
     cs3.Phone, 
     cs3.Fax, 
     cs3.Owner 
     cs3._Similarity, 
     cs3._Match 
from Customer_State3 cs3 
join (Select cm.Customer_Clean 
     from SFCustomerMerge cm 
     where cm.Customer_Clean like '%FF St%' 
     Group BY cm.Customer_Clean 
     HAVING COUNT(cm.Customer_Clean) > 1 
    ) dupes on dupes.Customer_Clean = case 
             when cs3._Similarity >= 0.80 
              and cs3._Match  = 'Solid Matched' 
              and cs3.Owner  is not NULL 
             then cs3.Ref_Name 
             else cs3.Name 
             end = dupes.Customer_Clean 
order by cs3._Similarity 
Смежные вопросы