SQL:WHERE子句的问题

SQL:WHERE子句的问题,sql,sql-server,Sql,Sql Server,上面的查询生成错误 查找错误-SQL Server数据库错误:关键字“内部”附近的语法不正确 如果我删除WHERE子句,它就可以正常工作。我不确定语法是否有问题?如果联接后需要执行条件,请尝试将其移到末尾: SELECT DISTINCT Interests.Interest_name, Impressions.Count FROM Interests WHERE Vertical_name = 'Retail' INNER JOIN Impressions ON Interests.In

上面的查询生成错误

查找错误-SQL Server数据库错误:关键字“内部”附近的语法不正确


如果我删除
WHERE
子句,它就可以正常工作。我不确定语法是否有问题?

如果联接后需要执行
条件,请尝试将其移到末尾:

SELECT  DISTINCT Interests.Interest_name, Impressions.Count 
FROM Interests 
WHERE Vertical_name = 'Retail'
INNER JOIN Impressions ON Interests.Interest_Name = Impressions.Interest_Name;

语法是错误的。您必须将
移动到
加入后的
位置

例如:

SELECT  DISTINCT Interests.Interest_name,Impressions.Count FROM Interests 
Inner Join Impressions ON Interests.Interest_Name = Impressions.Interest_Name
WHERE Vertical_name = 'Retail';
如果您试图预筛选您的表
兴趣
,您可以这样做:

SELECT  DISTINCT Interests.Interest_name,Impressions.Count 
FROM Interests 
INNER JOIN Impressions 
    ON Interests.Interest_Name = Impressions.Interest_Name
WHERE Vertical_name = 'Retail';

毕竟只是一个暗示。我建议你在每张桌子上都使用别名。如果您需要重命名表格,它将提高阅读效率并节省您的时间。

where
位于
from
子句之后。而
join
from
子句的一部分

使用别名,您的查询将更易于编写和读取:

SELECT  DISTINCT Interests.Interest_name,Impressions.Count 
FROM (
    SELECT *
    FROM Interests 
    WHERE Vertical_name = 'Retail'
    ) as Interests
INNER JOIN Impressions 
    ON Interests.Interest_Name = Impressions.Interest_Name;
如果不需要
独立的
,则应将其删除。这只会影响性能

事实上,编写此查询的更好方法是使用相关子查询:

SELECT  DISTINCT i.Interest_name, i.Count
FROM Interests i Inner Join
     Impressions im
     ON i.Interest_Name = im.Interest_Name;
WHERE Vertical_name = 'Retail';

这假设
Vertical\u Name
兴趣中。否则,它将进入子查询。

where子句应该位于连接之后。投票关闭是一个简单的语法错误。
SELECT  DISTINCT i.Interest_name, i.Count
FROM Interests i
WHERE EXISTS (SELECT 1
              FROM Impressions im
              WHERE i.Interest_Name = im.Interest_Name
             )
WHERE i.Vertical_name = 'Retail';