SQL объединяет два запроса в одну таблицу - PullRequest
2 голосов
/ 21 марта 2011

У меня есть эта таблица:

enter image description here

Я хочу выбрать последние две записи (две с наибольшим идентификатором), несмотря ни на что, а также 4 записи, которые имеют наиболее «мощные» оба запроса, объединенные вместе.

Так что в этом примере у меня будет только 4 результата, id 9 & 8, 3 & 4.

Я пытался:

$query = "SELECT * FROM table 
          ORDER BY power DESC LIMIT 4 
          INNER JOIN SELECT * FROM table 
                     ORDER BY id DESC LIMIT 2 ";

Я получаю ошибку "Неверный запрос". Что здесь не так?

Ответы [ 3 ]

3 голосов
/ 21 марта 2011

JOIN не то, что вам нужно, но UNION вернет несколько строк дважды (при совпадении обоих запросов). У меня нет MySQL под рукой, но попробуйте подзапросы:

SELECT * FROM table 
WHERE id IN (SELECT id FROM table ORDER BY id DESC LIMIT 2)
OR id IN (SELECT id FROM table ORDER BY power DESC LIMIT 4)
3 голосов
/ 21 марта 2011
( SELECT * FROM table ORDER BY power DESC LIMIT 4 )
UNION
( SELECT * FROM table ORDER BY id DESC LIMIT 2 )
0 голосов
/ 21 марта 2011

То, что вы хотите сделать, это СОЮЗ, а не ВНУТРЕННЕЕ СОЕДИНЕНИЕ

Пример:

SELECT column_name(s) FROM table_name1  
UNION  
SELECT column_name(s) FROM table_name2

Union добавляет результаты двух выбранных операторов вместе. Я бы порекомендовал прочесть статью Джеффа Этвуда о соединениях SQL, чтобы лучше понять, что делают разные объединения. http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...