2014-11-27 4 views
0

Я смущен здесь Это первый sql-Почему два sql дают разные результаты?

У меня есть одна запись в моей таблице cnt_content с content_pk=5419441 и title=test wls-2

Теперь, когда я бегу этот SQL 1-

SELECT 
    title, 
    content_pk 
FROM 
    cnt_content c 
WHERE 
    c.type not in (
     'AMT', 'LPA', 'QUE' 
    ) 
    AND c.private_flag = 'N' 
    AND c.searchable_flag = 'Y' 
    AND c.status in (
     'PUB', 'NAP' 
    ) 
    AND (
     trim(c.title) LIKE 'test wls-2' 
     OR trim(c.special_keyword) LIKE 'test wls-2' 
    ) 
    and not exists (
     SELECT 
     1 
     FROM 
     cmd_content_metadata cmd 
     WHERE 
     cmd.content_pk=5419441 
     AND cmd.for_others='Y' 
    ) 
ORDER BY 
    c.last_modified_date desc; 

это дает результат - content_pk=5419441 и title=test wls-2

Но когда я бегу этот sql 2-

SELECT 
    title, 
    content_pk 
FROM 
    cnt_content c 
WHERE 
    c.type not in (
     'AMT', 'LPA', 'QUE' 
    ) 
    AND c.private_flag = 'N' 
    AND c.searchable_flag = 'Y' 
    AND c.status in (
     'PUB', 'NAP' 
    ) 
    AND (
     trim(c.title) LIKE 'test wls-2' 
     OR trim(c.special_keyword) LIKE 'test wls-2' 
    ) 
    and not exists (
     SELECT 
     1 
     FROM 
     cmd_content_metadata cmd 
     WHERE 
     cmd.content_pk=c.content_pk 
     AND cmd.for_others='Y' 
    ) 
ORDER BY 
    c.last_modified_date desc; 

Это не дает никаких результатов. Кто-нибудь, пожалуйста, объясните.

+0

Потому что разница в 2 запросах. Пожалуйста, посмотрите здесь «cmd.content_pk = 5419441» в первом запросе, а во втором - «cmd.content_pk = c.content_pk». – AK47

ответ

0

Потому что в одном вы указываете только определенное значение для content_pk как 5419441, в то время как другое использует перекрестный запрос, что означает, что для каждого значения content_pk, выбранного во внешнем запросе, вы проверяете равенство в запросе субвыбора.

Смежные вопросы