Делайте несколько запросов, которые не могут быть подзапросами в одном простом SELECT, приводите к одному многорядному результату, используя MySQL
Я имею в виду конкретную вещь, которая не может быть решена с помощью очень простого мультизапроса 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
, Поиск в Google - это проблема, потому что я понятия не имею, какие слова использовать; используемый
mysql merge subqueries that return multiple rows
mysql multiple columns in result from subqueries
mysql select multiple queries as columns
просто чтобы получить что-то совершенно другое.
Результат в основном предназначен только для просмотра человеком, и строки не имеют ничего общего с другими столбцами, поэтому то, какие средства используются для объединения этих столбцов, не имеет значения, если производительность не слишком снижается; учитывая, что они не связаны вообще, делает JOIN
Это похоже на неправильный инструмент.
Вот где мое понимание останавливается.
2 ответа
Пытаться:
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
;
Ты ищешь 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;