简体   繁体   English

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

[英]Merge two subqueries into one in a SELECT statement?

Is there a best way to make this SELECT statement with these two subqueries ?有没有最好的方法用这两个子查询来制作这个 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"

You can rewrite your query using a JOIN instead:您可以改用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"

Note that if it's possible no entry in puzzles exists for a given ID value from news , you should use a LEFT JOIN and move the WHERE condition on puzzles into the JOIN .请注意,如果对于来自news的给定ID值可能不存在puzzles条目,您应该使用LEFT JOIN并将puzzles上的WHERE条件移动到JOIN This will then return NULL values for PUZZLE_OK and PUZZLE_BIS_OK in the same way as your subqueries will:然后,这将以与您的子查询相同的方式返回PUZZLE_OKPUZZLE_BIS_OK 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"

Note I've changed the alias on news to N to keep the SELECT clause consistent with what was in the subqueries in your question.注意我已将news上的别名更改为N以保持SELECT子句与您问题中子查询中的内容一致。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM