【问题标题】:Merge two subqueries into one in a SELECT statement?在 SELECT 语句中将两个子查询合并为一个?
【发布时间】:2020-10-05 00:39:54
【问题描述】:

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

【问题讨论】:

    标签: mysql select subquery


    【解决方案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 并将puzzles 上的WHERE 条件移动到JOIN .这将返回 PUZZLE_OKPUZZLE_BIS_OKNULL 值,就像您的子查询一样:

    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 子句与您问题的子查询中的内容保持一致。

    【讨论】:

    • 谢谢。我不知道为什么我没有考虑加入。
    • @Padd 有时您只需要另一双眼睛来查看您的代码。我很高兴能帮上忙。
    • 我之前尝试过使用 LEFT JOIN 来添加我的答案。我不知道我们可以在 LEFT JOIN ... ON ... 之后添加一些额外的 AND
    • @Padd 在使用LEFT JOIN 时,实际上有必要TR.TEAMID = "152" 等条件包含在连接条件中,否则LEFT JOIN 将变为INNER JOIN。见manual
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    相关资源
    最近更新 更多