GAUCHE les Colonnes de JOINTURE Avec la Clause where dans Oracle Entité la Valeur de l'Attribut(VAE) Tables de Base de données
J'ai une table des UTILISATEURS comme ce
UTILISATEURS
user_id | username
1 tom
2 sam
J'ai aussi un USER_META tableau comme celui-ci
USER_META
user_meta_id | user_id | meta_key | meta_value
1 1 active 1
2 1 car dodge
3 2 active 0
4 2 car honda
Mon problème est que j'ai besoin de sélectionner le meta_keys active et et voiture mais seulement pour les utilisateurs qui ont une valeur de 1 pour active donc mon ensemble des résultats doit être quelque chose comme ceci
user_id | user_name | user_meta_id | meta_key | meta_value
1 tom 1 active 1
1 tom 2 car dodge
J'ai essayé quelques petites choses mais je ne peux pas obtenir ce type de résultat. Voici ce que je pensais peut-être travailler
SELECT * FROM USERS
LEFT JOIN USER_META
ON USERS."user_id" = USER_META
AND (USER_META."meta_key" = 'active' OR USER_META."meta_key" = 'car')
WHERE (USER_META."meta_key" = 'active'
AND USER_META."meta_value" = 1)
le problème c'est que j'obtiens un résultat qui est absent de la voiture meta_key/meta_value
user_id | user_name | user_meta_id | meta_key | meta_value
1 tom 1 active 1
Comment puis-je modifier la requête pour obtenir toutes les informations meta? merci.
OriginalL'auteur Mike | 2011-11-28
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, ce type d'entité-attribut-valeur de modèle de données est généralement une très mauvaise idée. Vous avez l'impression de re-mise en œuvre de ce qu'est une base de données relationnelle vous donne de la boîte et les requêtes obtenir très lourd très rapidement. Généralement, vous aurez besoin de les rejoindre dans le
USER_META
tableau N fois afin d'obtenir soit N attributs comme des colonnes ou pour avoir N prédicats sur vos données.Sur la modélisation de l'avant, à l'avenir, les développeurs seront généralement reconnaissants si vous éviter de créer de la casse des noms de colonne, de sorte qu'ils n'ont pas de double-quote chaque identificateur à chaque fois.
Depuis que vous avez besoin de deux clés, vous devriez être en mesure de faire quelque chose comme ça (je suppose que
meta_value
est toujours stocké en tant que chaîne de caractères, même si elle représente un numérique ou une valeur booléenne)qui renvoie les résultats attendus pour les données que vous avez posté
OriginalL'auteur Justin Cave
Vraiment? C'est bizarre... auriez-vous l'esprit en montrant certaines données, de sorte que nous pouvons affiner cette? BTW. J'ai changé le code pour utiliser
IN
mais c'est juste le même que l'utilisation de plusieursOR
.C'est à cause de cela:
WHERE USERS."user_id" IN (select USERS."user_id" from USER_META
mais il devrait êtreWHERE USERS."user_id" IN (select USER_META."user_id" from USER_META
Mon erreur, maintenant c'est corrigé
OriginalL'auteur Adrian Carneiro
C'est hors de ma tête car je n'ai pas une instance Oracle pour le test, mais quelque chose le long de ces lignes:
OriginalL'auteur Snipe656
Essayer avec ceci:
OriginalL'auteur Galled