在 SELECT 语句中将两个子查询合并为一个?

Merge two subqueries into one in a SELECT statement?

有没有最好的方法来使用这两个子查询来创建这个 SELECT 语句?

SELECT N.ID, N.NAME 
   (SELECT TR.PUZZLE 
    FROM puzzles TR
    WHERE TR.TEAMID = "152" 
      AND TR.NID= N.ID) AS PUZZLE_OK,
   (SELECT TR.PUZZLE_BIS 
    FROM puzzles TR
    WHERE TR.TEAMID = "152" 
      AND TR.NID= N.ID) AS PUZZLE_BIS_OK
FROM news N
WHERE N.SERIESID = "1"

您可以改用 JOIN 重写您的查询:

SELECT N.ID, N.NAME, TR.PUZZLE AS PUZZLE_OK, TR.PUZZLE_BIS AS PUZZLE_BIS_OK
FROM news N
JOIN puzzles TR ON TR.NID = N.ID
WHERE N.SERIESID = "1"
  AND TR.TEAMID = "152"

请注意,如果 news 中的给定 ID 值可能不存在 puzzles 中的条目,您应该使用 LEFT JOIN 并移动 WHERE条件就puzzles变成了JOIN。然后,这将为 PUZZLE_OKPUZZLE_BIS_OK return NULL 值,其方式与您的子查询相同:

SELECT N.ID, N.NAME, TR.PUZZLE AS PUZZLE_OK, TR.PUZZLE_BIS AS PUZZLE_BIS_OK
FROM news N
LEFT JOIN puzzles TR ON TR.NID = N.ID AND TR.TEAMID = "152"
WHERE N.SERIESID = "1"

请注意,我已将 news 上的别名更改为 N 以使 SELECT 子句与您问题中子查询中的内容保持一致。