2011-03-28 288 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