0

我有一个特定的事情不能通过一个非常简单的多子查询来解决SELECT,显示在底部:使用查询 1

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

只是为了得到完全不同的东西。

结果主要仅供人类查看,并且行与其他列无关,因此只要性能没有下降太多,使用什么方法来合并这些列并不重要;鉴于它们根本不相关,因此JOINs 看起来像是错误的工具。

这就是我的理解停止的地方。

4

2 回答 2

0

您正在寻找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;
于 2015-06-07T20:13:18.653 回答
0

尝试:

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
;
于 2015-06-07T20:21:08.053 回答