簡體   English   中英

SQL:WHERE 子句的問題

[英]SQL: Issue with WHERE Clause

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

上述查詢產生錯誤

查找錯誤 - SQL Server 數據庫錯誤:關鍵字“Inner”附近的語法不正確。

如果我刪除WHERE子句,它就可以正常工作。 我不確定語法是否有問題?

WHERE條件需要在 joins 之后去,嘗試將其移動到最后:

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

那么語法是錯誤的。 您必須在JOIN后移動WHERE

例如:

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

如果您嘗試預先過濾您的表Interests您可以這樣做:

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;

畢竟只是一個提示。 我建議您為每個表使用別名。 如果您需要重命名表格,它將改善閱讀並為您節省。

from子句后面where joinfrom子句的一部分。

您的查詢使用別名更容易編寫和閱讀:

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

如果您不需要DISTINCT ,那么您應該將其刪除。 它只會損害性能。

實際上,編寫此查詢的更好方法是使用相關子查詢:

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

這假設Vertical_NameInterests 否則,它將進入子查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM