#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')