簡體   English   中英

使用“ AND”和“ OR”語句的SQL連接

[英]SQL Join with “AND” + “OR” statement

我在處理此SQL語句時遇到麻煩。 我試圖將結果限制為ID為“ 25”和“ 87”的玩家。 查詢沒有錯誤(我正在通過此查詢獲取每個PID)這是該語句。

SELECT Rosters.PID, SUM( Rosters.Goals ) Goals, SUM( Rosters.Assists ) Assists, SUM( Rosters.PIM ) PIM, Rosters.TID, Players.pid, Players.firstname, Players.lastname, 
       SUM((Rosters.Goals + Rosters.Assists)) AS Points, Teams.tid, Teams.teamname
       FROM Rosters
       INNER JOIN Players
       ON Rosters.PID = Players.pid
       INNER JOIN Teams 
       ON Rosters.TID = Teams.tid
       WHERE ((Rosters.TID BETWEEN 9 AND 16) AND (Players.pid = 25 OR 87))
       GROUP BY 
       Players.pid
       ORDER BY Points DESC

我幾乎可以肯定這是我對SQL缺乏了解的原因,但是W3C學校沒有提供更復雜的解決方案,並且我查找的Stack線程已經相當本地化。

這是當前輸出。 應該是ID為25和87的玩家

您在Players.pid周圍的狀況有Players.pid

它應該是

(Players.pid = 25 OR Players.pid = 87)

邏輯OR運算符結合了兩個邏輯條件。 Players.pid = 25是有效條件,其評估結果為布爾值truefalse 但是87絕對不評估布爾值。

只需將代碼的一部分從Players.pid = 25 OR 87 Players.pid = 25 OR Players.pid = 87Players.pid = 25 OR Players.pid = 87

或者,您可以使用IN構造將Players.pid與可能的值列表進行匹配(請注意,不再需要外部花括號):

WHERE Players.pid IN (25, 87) AND Rosters.TID BETWEEN 9 AND 16

另外,如果您認為Players.pid會增加以檢查條件,則可以使用IN操作並像這樣使用

AND Players.pid IN (25,87) // You can add here more id to check

代替您的代碼

AND (Players.pid = 25 OR 87)

暫無
暫無

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

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