mysql - 在 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"
解决方案
您可以改用 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_OK
PUZZLE_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"
请注意,我已将别名更改news
为N
以使该SELECT
子句与您问题中的子查询中的内容保持一致。
推荐阅读
- reactjs - React,将 const 更改为带有 props 的组件
- mongodb - 如何在 MongoDB 中同时从两个集合中获取数据?
- php - 如何在没有mysql的情况下更新和删除html表中的特定值
- java - 将 `this` 从不同的片段传递给构造函数
- excel - 在一张纸上循环列标题并在另一张纸上找到完全匹配的 VBA 代码
- apache-spark - Pyspark - saveAsTable 在 show() 数据帧完美运行时引发索引错误
- python - 更新python后,我是否必须再次安装模块?
- vba - 在vba excel中保存大量字符串
- php - php字符串匹配检查没有得到预期的结果
- java - 在 Spring Boot 应用程序的 REST 调用中接受 Enum 的空字符串