2015-06-07 4 views
0

У меня есть определенная вещь, которая не может быть решена с помощью очень простого многоподзапроса SELECT, показанного внизу: принимает запрос 1Сделайте несколько запросов, которые не могут быть подзапросами в одном и том же простом вводе SELECT в один результат multirow с использованием 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. Googling - проблема, потому что я понятия не имею, какие слова использовать; использовано

mysql merge subqueries that return multiple rows 
mysql multiple columns in result from subqueries 
mysql select multiple queries as columns 

как раз для того чтобы получить что-то совершенно другое.

Результат в основном предназначен только для просмотра человеком, и строки не имеют ничего общего с другими столбцами, поэтому какие средства используются для объединения этих столбцов, как это не имеет значения, если производительность не слишком высока; учитывая, что они вообще не связаны, делает JOIN s похожим на неправильный инструмент.

Вот где мое понимание прекращается.

ответ

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; 
+0

Это не дает результата я ищу Потому что тот, я ищу гораздо проще читать. – rautamiekka

+0

К сожалению, простота чтения не означает, что это правильное решение. И решения подзаголовка являются суб-общими и сложнее читать. Что произойдет, если есть другое количество Rookies vs Eager? Вы должны отформатировать его для чтения пользователями в своем приложении :) – Martin

+0

Существует большая разница в подсчете строк между несколькими подзапросами (эти 2 не являются единственными), но как просто для чтения компьютером doesn ' неважно, пока производительность для получения результата не будет убита. – rautamiekka

0

Try:

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 
; 
+0

Это намного ближе, но, как ни странно, второй столбец повторяет одно имя для так много строк, прежде чем показывать другое имя: O – rautamiekka

+0

добавить отличное перед игровым именем для второго запроса; обновлено выше – rcheuk

+0

Протестировано путем добавления 'DISTINCT' к обеим подсистемам' SELECT', похоже, что-то делает, но не затрагивает основной вопрос, упомянутый выше. – rautamiekka

 Смежные вопросы

  • Нет связанных вопросов^_^