Как использовать два предложения where в подзапросе?

#sql #sql-server

#sql #sql-сервер

Вопрос:

Мне нужно запросить набор данных (сначала WHERE ) и на основе этого результата подзапрос с другим WHERE. Используя следующий код, я получаю

 **Incorrect syntax near the keyword 'where'.**
  

Не могли бы вы сказать мне, что я здесь делаю не так?


  select * from [Analytics]
    WHERE
    DateCreated >= '2014-05-01'
    AND DateCreated < '2014-06-01'
    AND Identification = 'ElementFlow'
    where exists
    (
    SELECT *
    FROM [Analytics]
    WHERE Location = 'x.DetailsAdvertisement' 
    OR Location = 'x.DetailsShop'
    OR Location = 'x.None'
    OR Location = 'x'
    )
  

Комментарии:

1. Вы выбираете из той же таблицы. Тогда зачем вам нужен подзапрос?

2. Замените второе where на and .

3. Просто замечание: как только вы замените второе WHERE на AND , предложение exists будет правильным. Он выберет все указанные записи, если данные, которые вы ищете в подзапросе, существуют, или их нет в противном случае. Это связано с тем, что подзапрос не связан с записью в основном запросе. Это желательно?

Ответ №1:

Вы должны изменить where exists на and exists и это должно быть так.

Ответ №2:

Попробуйте сделать это, удалив предложение where, появляющееся два раза

 select * from [Analytics]
    WHERE
    DateCreated >= '2014-05-01'
    AND DateCreated < '2014-06-01'
    AND Identification = 'ElementFlow'
    AND exists
    (
    SELECT *
    FROM [Analytics]
    WHERE Location = 'x.DetailsAdvertisement' 
    OR Location = 'x.DetailsShop'
    OR Location = 'x.None'
    OR Location = 'x'
    )
  

Или попробуйте это…

 select * from [Analytics]
        WHERE
        DateCreated >= '2014-05-01'
        AND DateCreated < '2014-06-01'
        AND Identification = 'ElementFlow'
        AND location in ('x.DetailsAdvertisement' ,'x.DetailsShop','x.None','x')
  

Ответ №3:

Вы используете предложение WHERE дважды. Замените второе WHERE на AND и это должно сработать.

 select * from [Analytics]
WHERE
DateCreated >= '2014-05-01'
AND DateCreated < '2014-06-01'
AND Identification = 'ElementFlow'
AND exists
(
SELECT *
FROM [Analytics]
WHERE Location = 'x.DetailsAdvertisement' 
OR Location = 'x.DetailsShop'
OR Location = 'x.None'
OR Location = 'x'
)
  

Ответ №4:

Используйте еще один уровень, как это звучит?

 SELECT * FROM 
(
  select * from [Analytics]
  where exists
    (
    SELECT *
    FROM [Analytics]
    WHERE Location = 'x.DetailsAdvertisement' 
    OR Location = 'x.DetailsShop'
    OR Location = 'x.None'
    OR Location = 'x'
    )
) a
WHERE 
  DateCreated >= '2014-05-01'
  AND DateCreated < '2014-06-01'
  AND Identification = 'ElementFlow'
  

Ответ №5:

Попробуйте это:

 SELECT  *
FROM    [Analytics]
WHERE   DateCreated >= '2014-05-01' AND DateCreated < '2014-06-01'
        AND Identification = 'ElementFlow'
        AND Location IN('x.DetailsAdvertisement', 'x.DetailsShop', 'x.None', 'x')