2014-06-18 58 views
0

我需要查询一组数据(第一个WHERE)并基于该结果的子查询与另一个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'。 –

+1

只是一句话:一旦你用AND替换第二个WHERE,那么exists子句是正确的。如果您在子查询中查找的数据存在,它将选择**所有**指定记录,否则将选择** none **。这是因为子查询与主查询中的记录没有关系。这是需要的吗? –

回答

2

你应该改变where existsand exists这应该是它。

0

您正在使用WHERE子句两次。用AND替换第二个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' 
) 
1

通过移除试试这个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') 
0

使用一个以上的水平,它是怎样的声音?

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' 
0

试试这个:

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