在 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_OK
和 PUZZLE_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
子句与您问题中子查询中的内容保持一致。
有没有最好的方法来使用这两个子查询来创建这个 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_OK
和 PUZZLE_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
子句与您问题中子查询中的内容保持一致。