在同一个简单的SELECT中导致多个查询无法进行子查询SELECT导致使用MySQL的单个多行结果
我有一个特定的问题,无法通过底部显示的一个非常简单的多子查询SELECT
来解决:取查询1在同一个简单的SELECT中导致多个查询无法进行子查询SELECT导致使用MySQL的单个多行结果
SELECT playername AS Rookie FROM MinecraftMySQL.`lb-players` WHERE onlinetime >= 129600 AND onlinetime < 648000 ORDER BY playername;
返回像
+------------------+
| Rookie |
+------------------+
| _Golden_Apple |
| _MineTrick_ |
+------------------+
(只是一个整结果的部分)和查询结果2
SELECT playername AS Eager FROM MinecraftMySQL.`lb-players` WHERE onlinetime >= 648000 AND onlinetime < 1296000 ORDER BY playername;
返回类似(只是整个结果的一部分)
+-----------------+
| Eager |
+-----------------+
| 1Herofox |
| 1lyndon |
+-----------------+
的想法是那些列相结合,得到这样的:
+------------------+-----------------+
| Rookie | Eager |
+------------------+-----------------+
| _Golden_Apple | 1Herofox |
| _MineTrick_ | 1lyndon |
+------------------+-----------------+
查询像
SELECT
(SELECT playername FROM MinecraftMySQL.`lb-players` WHERE onlinetime >= 129600 AND onlinetime < 648000) AS Rookie,
(SELECT playername FROM MinecraftMySQL.`lb-players` WHERE onlinetime >= 648000 AND onlinetime < 1296000) AS Eager
;
导致1242 (21000): Subquery returns more than 1 row
。谷歌搜索是一个问题,因为我不知道要用什么单词;使用
mysql merge subqueries that return multiple rows
mysql multiple columns in result from subqueries
mysql select multiple queries as columns
只是为了得到完全不同的东西。
结果主要是仅供人观看,行与其他列无关,所以只要性能没有下降太多,用什么方法合并那些列并不重要;因为它们根本不相关,所以使得JOIN
看起来像是错误的工具。
这就是我理解停止的地方。
您正在寻找UNION
:
SELECT playername, 'Rookie' as Rank
FROM MinecraftMySQL.`lb-players`
WHERE onlinetime >= 129600 AND onlinetime < 648000
UNION
SELECT playername, 'Eager' as Rank
FROM MinecraftMySQL.`lb-players`
WHERE onlinetime >= 648000 AND onlinetime < 1296000
ORDER BY playername;
尝试:
SELECT Rookie.playername as Rookie, Eager.playername as Eager from
(SELECT distinct playername FROM MinecraftMySQL.`lb-players` WHERE onlinetime >= 129600 AND onlinetime < 648000) Rookie
JOIN
(SELECT distinct playername FROM MinecraftMySQL.`lb-players` WHERE onlinetime >= 648000 AND onlinetime < 1296000) Eager
;
这是非常接近的,但奇怪的是,第二列在显示另一个名称之前重复了很多行的单个名称:O – rautamiekka
在第二个查询的playername前添加了不同的名称;更新超过 – rcheuk
通过在两个子选项中增加DISTINCT来测试,它似乎有所作为,但不会影响上面提到的主要问题。 – rautamiekka
它不会产生我在寻找的Cuz一个我要找的结果要简单得多读。 – rautamiekka
不幸的是,阅读更简单并不意味着它是正确的解决方案。而子选择解决方案不够理想,难以阅读。如果有新手对Eager的数量不同,会发生什么?您应该格式化它以供用户阅读您的应用程序:) – Martin
多个子查询(这两个不是唯一的)之间的行数有很大的差异,但是对于计算机来说,读取操作有多简单,只要性能取得的结果不会被杀死。 – rautamiekka