首页 > 解决方案 > 在 SELECT 语句中将两个子查询合并为一个?

问题描述

有没有最好的方法用这两个子查询来做这个 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"

标签: mysqlselectsubquery

解决方案


您可以改用 a 重写查询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"

请注意,如果 中puzzles的给定ID值可能不存在 in news,则应使用 aLEFT JOIN并将WHERE条件puzzles移至JOIN. 然后,这将以与您的子查询相同的方式返回NULL值:PUZZLE_OKPUZZLE_BIS_OK

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"

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


推荐阅读