Сложный SQL-запрос - PullRequest
       7

Сложный SQL-запрос

0 голосов
/ 29 марта 2011

У меня есть таблица, которая выглядит следующим образом:

meta_id post_id     meta_key    meta_value
271     4   _aciudad             New york
270     4   _apais               USA
267     10  _aservicio           Alojamiento

...
261     43  _apais               USA
238     43  _aciudad             Chicago
262     43  _aservicio           Alojamiento
...
261     43  _apais               USA
238     43  _aciudad             Miami
262     43  _aservicio           Alojamiento

Что мне нужно сделать, это отобразить все регистры, которые соответствуют Страна> Город.Или упорядочить все регистры _aciudad по странам, например:

meta_id post_id  meta_key   meta_value       meta_key    meta_value 
235      42      _aciudad        New York     _apais       USA
236      56      _aciudad        Chicago      _apais       USA
237      57      _aciudad        Miami        _apais       USA
238      58      _aciudad        Sidney       _apais      Australia
238      59      _aciudad        Melbourne    _apais      Australia

Я понятия не имею, как это сделать, я полагаю, с INNER JOIN?двойной выбор?Пожалуйста, помогите мне !!

Ответы [ 4 ]

1 голос
/ 29 марта 2011
   SELECT t1.meta_id, 
           t1.post_id, 
           t1.meta_key, 
           t1.meta_value, 
           t2.meta_key, 
           t2.meta_value 
    FROM table t1, table t2  
    WHERE t1.post_id = t2.post_id 
    AND t1.meta_key = '_apais'
    AND t2.meta_key = '_aciudad'
    ORDER BY t1.meta_key
1 голос
/ 29 марта 2011

Я не уверен, что это то, что вы ищете, или если поле JOIN ON является правильным, потому что это не очень понятно в вашем вопросе, но как насчет этого запроса?

SELECT City.meta_id
     , City.post_id
     , City.meta_key
     , City.meta_value
     , Country.meta_key
     , Country.meta_value
  FROM yourTable City
INNER JOIN yourTable Country ON City.post_id = Country.post_id
WHERE City.meta_key = '_aciudad' AND Country.meta_key = '_apais'
ORDER BY Country.meta_value, City.meta_value
0 голосов
/ 29 марта 2011

Попробуйте самостоятельно присоединиться.Чтобы это работало, вы должны использовать псевдонимы для таблицы, чтобы вы могли ссылаться на нее дважды.

Примерно так:

select

  t1.meta_id, t1.post_id,
  t1.meta_key, t1.meta_value, 
  t2.meta_key, t2.meta_value

from TableName t1
  inner join TableName t2
  on t1.meta_id = t2.meta_id and t1.post_id = t2.post_id
    and t1.meta_key = "_aciuidad" and t2.meta_key = "_apais"
0 голосов
/ 29 марта 2011
SELECT  mc.*, mp.meta_key, mp.meta_value
FROM    meta mc
JOIN    meta mp
ON      mp.post_id = mc.post_id
        AND mp.meta_key = '_apais'
WHERE   mc.meta_key = '_aciudad'
ORDER BY
        mp.meta_value, mc.meta_value
...