-1
votes

Pourquoi la jointure gauche ne donne-t-elle pas la valeur de la table de gauche avec des valeurs null d'une autre table où l'état devient faux?

J'ai une table comme celle-ci-

 Entrez la description de l'image ici

La sortie attendue est -:

 Entrez la description de l'image ici

Je reçois le résultat exact avec cette requête -: xxx

mais je ne veux pas utiliser de fonction SQL dans ma requête , alors j'ai essayé celui-ci -: xxx

Utilisation de cette requête que je reçois -:

 Entrez la description de l'image ici

Je sais que je fais une erreur très idiote quelque part, mais je suis coincé ici et maintenant pas. Aidez-moi s'il vous plaît si vous pouvez obtenir cette chose. Merci d'avance :)


9 commentaires

"Mais je ne veux utiliser aucune fonction SQL dans ma requête" pourquoi pas?


BCOZ Quelqu'un m'a demandé de le faire.


Et pourquoi vous ont-ils demandé de le faire? Est-ce une question d'entrevue? Pourquoi dit-ils que vous ne pouvez pas utiliser une fonction, quand il est clairement le bon choix ici.


Pas une question d'entretien, mon ami m'a demandé


Ensuite, je répondrais avec nullif est la fonction correcte à utiliser ici. Éviter une fonction ne ferait que la requête plus complexe et éventuellement confondre l'utilisateur final. Je ne peux pas voir une bonne raison que votre ami est opposé à nullif .


@Larnu je sais toutes ces choses que vous me dites, si vous savez ce que j'ai demandé pour la réponse.


J'ai, @ishubh; Mais cela semble une logique très étrange.


C'est une question terrible - comment puis-je faire cette chose, mais ne me dis pas aucune des façons de bonne manière de le faire, car ils sont "non autorisés" ...


@aaron d'abord, aucun corps ne vous a obligé à donner une réponse à ma question. Deuxièmement, je connaissais le meilleur moyen d'abord et j'ai mentionné que dans ma question "si tu peux voir". Mais j'avais des contraintes que je me suis demandé une façon délicate de le faire à un gars intelligent délicat "de façon définitivement pas à vous" d'accord


3 Réponses :


1
votes

Comme je l'ai dit dans les commentaires, je ne peux voir aucun problème avec la requête que vous avez, autrement que vous utilisez une syntaxe ANSI-92: xxx

si, pour des raisons inconnues, vous ne doit pas utiliser nullif vous pouvez faire quelque chose d'étrange comme celui-ci; Mais je ne vois aucune raison pour laquelle vous voulez: xxx


0 commentaires

0
votes

Si vous ne voulez pas utiliser de fonction, la clause de casse peut fonctionner pour vous ici -

 SELECT a.city as source, CASE WHEN a.city = b.city THEN null ELSE b.city as destination
 FROM TABLENAME a
 CROSS JOIN TABLENAME b


1 commentaires

Vous réalisez que cela est en fait identique à la version nullif droite? NULLIF est un cas de courte main expression; Donc, il est en fait identique à la SQL de l'OP dans la question. Je ne dis pas que cela est donc "faux", mais il n'a aucun sens que c'est la réponse acceptée quand elle est en réalité (du point de vue du SGBM) exactement la même chose. nullif : "NULLIF est équivalent à une expression de cas recherchée dans laquelle les deux expressions sont égales et l'expression résultante est null."



1
votes

Pourquoi ne pas utiliser Union tout code>?

select c.city, c2.cty
from cities c join
     cities c2
     on c.city <> c2.city
union all
select c.city, null
from cities c;


0 commentaires