Quertielle SQL complexe
Question
J'ai une table qui ressemble à ceci:
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
Ce que je dois faire, c'est afficher tous les registres qui correspondent à la ville> la ville.Ou commander tous les registres _aciudad par pays, quelque chose comme:
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
Je ne sais pas comment faire cela, je suppose avec une jointure intérieure?une double sélection?S'il vous plaît aidez-moi !!
La solution
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
Autres conseils
Je ne sais pas si c'est ce que vous recherchez ou si la jointure sur le terrain est correcte, car il n'est pas très clair dans votre question, mais qu'en est-il de cette requête?
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
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
Essayez un auto-rejoindre.Pour le faire fonctionner, vous devez utiliser des alias pour la table, vous pouvez donc vous y référer deux fois.
quelque chose comme ceci:
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"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow