在WHERE子句中使用SELECT语句

jof*_*itz 9 sql select where-clause

SELECT * FROM ScoresTable WHERE Score = 
  (SELECT MAX(Score) FROM ScoresTable AS st WHERE st.Date = ScoresTable.Date)
Run Code Online (Sandbox Code Playgroud)

在WHERE子句中是否有使用SELECT语句描述的名称?这是好/坏的做法吗?

这会是一个更好的选择吗?

SELECT ScoresTable.* 
FROM ScoresTable INNER JOIN 
  (SELECT Date, MAX(Score) AS MaxScore 
  FROM ScoresTable GROUP BY Date) SubQuery 
  ON ScoresTable.Date = SubQuery.Date 
  AND ScoresTable.Score = SubQuery.MaxScore
Run Code Online (Sandbox Code Playgroud)

它不那么优雅,但似乎比我以前的版本运行得更快.我不喜欢它,因为它在GUI中没有很清楚地显示(并且需要SQL初学者理解).我可以将它分成两个单独的查询,但随后事情开始变得混乱......

NB我需要的不仅仅是日期和分数(例如姓名)

Pab*_*ruz 7

这根本不是一种做法.它们通常被称为SUBQUERY,SUBSELECTNESTED QUERY.

这是一个相对昂贵的操作,但在处理数据库时遇到很多子查询是很常见的,因为它是对数据执行某种操作的唯一方法.


Mla*_*dic 6

它被称为相关子查询.它有它的用途.

  • 不,这不对.按照您的方式,为表中的每一行运行子查询.将它作为一个像你一样的连接总是更好. (3认同)