J'ai des problèmes avec la rédaction d'une certaine requête SQL. J'ai un portefeuille et un équilibre que je joins. La requête ressemble maintenant à celle: en raison de la clause acclamations! P> p> où code>, la requête renvoie juste des enregistrements correspondants. Je veux obtenir tous les enregistrements de la table des portefeuilles et seulement ceux des balances qui correspondent à la clause ... J'espère que je l'ai expliqué assez bien! P>
4 Réponses :
Utilisez sous-requête
SELECT w.*,t.* FROM wallet w LEFT JOIN ( select * from balances where user_id = 181 ) t ON w.currency =t.currency
problème est que vous appliquez un filtre sur des portefeuilles de table de jointure gauche.
Utilisez ci-dessous requête. P>
SELECT `balances`.`id` AS `id`, FROM `wallet` LEFT JOIN (select * from `balances` `user_id` = '181') ON ( `wallet`.`currency` = `balances`.`currency` );
La question n'est pas complètement claire, mais vous avez presque certainement besoin d'une clause code> supplémentaire code> sur une sorte d'identité. Maintenant, il n'ya aucun moyen de faire correspondre un portefeuille avec son ou ses équilibre. En supposant que l'équilibre ayez, par exemple. A wallet_id code>, vous voudrez quelque chose comme:
SELECT
`balances`.`id` AS `id`,
FROM
`wallet`
LEFT JOIN `balances` ON
(`wallet`.`id` = `balance`.`wallet_id` )
WHERE
`balances`.`user_id` = '181'
Déplacez la condition dans la clause sur code>. N'utilisez pas de sous-requêtes!
SELECT w.*, b.id
FROM wallet w LEFT JOIN
balances b
ON w.currency = b.currency AND
b.user_id = 181;
de code> peut gêner l'optimiseur. li>
Joindre de gauche code>, vous devez sélectionner les colonnes à partir de la table premier em>. li>
user_id code> est un numéro, donc j'ai supprimé les citations autour de la valeur de comparaison. LI>
Pouvez-vous clarifier ce que vous voulez que le résultat final ressemble? À première vue, il semble que cela devrait être deux requêtes distinctes.
Pouvez-vous fournir un exemple, clarifier quel est le résultat réel et que vous attendez-vous à la place?
Vous pouvez utiliser l'opérateur de l'Union SQL
Disons qu'il y ait une sorte de 100 portefeuille, un portefeuille = un équilibre, certains utilisateurs x ont 5 soldes de manière ... je veux que QUIRERY retourne tous ces 100 portefeuilles et des soldes assortis de la table des équilibres, mais en raison de l'endroit où la clause Renvoie juste ces 5 enregistrements correspondants ...