0
votes

Où la clause s'appliquait à une seule colonne de rejoindre

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: xxx

en raison de la clause , 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!

acclamations!


4 commentaires

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 ...


4 Réponses :


1
votes

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


0 commentaires

1
votes

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` );


0 commentaires

1
votes

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'


0 commentaires

0
votes

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;
  • la sous-requête dans le de code> peut gêner l'optimiseur. li>
  • Si vous utilisez un Joindre de gauche code>, vous devez sélectionner les colonnes à partir de la table premier em>. li>
  • Je suppose que user_id code> est un numéro, donc j'ai supprimé les citations autour de la valeur de comparaison. LI>
  • Les alias de table rendent la requête plus facile à écrire et à lire. Li>
  • Les backtsticks rendent la requête plus difficile à écrire et plus difficile à lire. Li> ul> p>


0 commentaires