-1
votes

Sélectionnez le prix Max d'un livre avec jointure (2 tables) dans SQL Server?

J'ai 2 tables xxx pré>

La question est la suivante: Comment répertorier tous les titres de livres ( nombk code>) qui ont le prix maximum? P>

PS: TRAFIER code> a les colonnes de prix et une clé étrangère de livres code> qui est _numbk code> p>

J'ai essayé Ceci: P>

select max(prix) 
from TARIFER tr, books o 
where o.numbk = tr._numbk


1 commentaires

Mauvaises habitudes à frapper: Utiliser Old- Style jointures - que la liste des tables de style de style a été remplacée par le style ANSI ANSI ANSI Joindre Syntaxe dans l'ANSI - 92 SQL Standard ( Plus de 25 ans Il y a) et son utilisation est découragée


3 Réponses :


3
votes

dans SQL Server, vous pouvez utiliser Top (1) avec des liens CODE>:

select top (1) with ties b.nombk, t.prix
from books b join
     TARIFER t
     on b.numbk = t._numbk
order by t.prix desc;


2 commentaires

Merci ! Toute autre manière sans utiliser 'avec des liens. . . ' ?


@ 0x544D. . . Cela semble être l'approche la plus commode.



1
votes

Les deux requêtes à l'agrégation, mais pas au même niveau:

  • La première requête a groupe par o.nombk , de sorte qu'il génère un enregistrement par livre et vous donne le prix maximum de ce livre Accross tous les tarifers.

  • La deuxième requête n'a pas de groupe par clause, il vous donne donc le prix maximum de tous les livres sur tous les tarifs.

    Si vous voulez le livre avec le prix plus élevé, il n'est pas nécessaire d'agréger: vous pouvez rejoindre et trier les résultats par prix: xxx

    < code> haut (1) avec les liens vous donne le premier enregistrement; S'il y a plusieurs enregistrements avec le même prix, la requête les renvoie tous.


5 commentaires

AGRÉABLE !! Mais je ne suis pas autorisé à utiliser avec .. Toute solution?


@ 0x544D: Qu'est-ce que vous n'êtes pas autorisé à utiliser?


Le avec dans avec les cravates est une syntaxe spéciale. Il ne concerne pas le mot-clé avec , utilisé pour créer des expressions de table communes . Tu peux l'utiliser.


Je voulais dire avec des liens, ils s'attendent à ce que je trouve 2 solutions pour ce problème, je suis à peu près sûr qu'ils entendent par 2 solutions: top - max ..


Pourquoi voudriez-vous 2 solutions? Vous pouvez (afaik) utiliser extraire avec SQL Server ... - Est-ce une sorte de question de devoirs?



1
votes

Pourquoi ne pas utiliser juste une sous-requête, obtenez-vous le max (Prix), puis utilisez-le pour répertorier tous les enregistrements avec ce Prix:

select o.nombk ,prix 
from TARIFER tr , books o 
where o.numbk = tr._numbk
  and tr.prix in (select max(prix) from TARIFER tr)


1 commentaires

Merci j'ai littéralement oublié d'anciens cours de sous-requêtes LOL. Ça va faire, merci.