2011-03-28 219 views
0

我有一个表,看起来像这样:复杂的SQL查询

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 

我需要做的,是显示符合国家>市所有的寄存器。或ORDER BY全国所有_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?双重选择?请帮帮我!!

+0

是在同一个表中的所有数据? – Cninroh 2011-03-28 22:07:55

+0

迈阿密和美国之间的联系是什么? post_id?但是帖子ID 43在不同的_aciudad中至少有6条记录。实际上,我很难看出你是从238/43 /迈阿密到结果 – RichardTheKiwi 2011-03-28 22:18:54

回答

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

@理查德:我的不好,想通了,纠正了它。 – rkg 2011-03-28 22:17:21

+0

理查德,你的作品也很完美,非常感谢! – Alberto 2011-03-29 19:16:45

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

// @理查德:也许,也许他希望列出所有的城市/国家。 – Quassnoi 2011-03-28 22:19:14

1

我不知道这是否是你要找的东西,或者如果连接现场是正确的,因为这不是你的问题很清楚,但这个怎么查询?

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

谢谢Miky!您的查询完美无缺! – Alberto 2011-03-29 19:14:06

0

尝试自我加入。为了使它工作,你必须使用表的别名,所以你可以参考两次。

事情是这样的:

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

张贴的数据是无稽之谈,所以我猜。我真的觉得他只需要被告知如何做一个自我加入,他会为自己找出其余的。 – Ben 2011-03-28 22:35:01