2010-12-01 25 views
0

Je comprends comment faire cela sur le papier dans SQL, mais je suis de la difficulté à mettre en œuvre ce en Java (ce qui est la première fois que je programmais en fait des choses JDBC)L'utilisation d'une requête dans un autre dans JDBC programmation

Par exemple, dire ma base de données se compose de:

film (Code, titre, éditeur)

client (CustNo, nom)

emprunté (CustNo, Code)

Je veux trouver le nom des clients qui ont emprunté tous les films par pubisher ABC

string no_of_ABC_movies = "SELECT COUNT(publisher), publisher FROM movie, WHERE movie.publisher = 'ABC'"; 

string no_of_cust_ABC_movies = "SELECT COUNT(name), name FROM customer, borrowed, movie, WHERE customer.custno = borrowed.custno AND borrowed.code = movie.code AND movie.publisher = 'ABC'"; 


String query = "SELECT name" + 
         " name FROM customer, borrowed, movie" + 
         " WHERE customer.custno = borrowed.custno AND" + 
         " borrowed.code = movie.code AND" + 
         " movie.publisher = 'ABC' AND" + " " 
         no_of_cust_ABC_movies + " = " + no_of_ABC_movies; 

Ce n'est pas la base de données exacte, je travaille avec, mais requête va travailler et imprimer les noms des personnes qui ont emprunté des films à ABC sans la dernière ligne, mais dit que j'ai une erreur dans la syntaxe SQL avec la dernière ligne donc je suppose que je ne sais pas comment utiliser une requête dans une autre.

+0

Je pense que vous avez une erreur copier-coller. après 'ABC' sur l'avant-dernière ligne, vous fermez la chaîne, mais pas de signe +. – hvgotcodes

+0

Désolé, ce n'était qu'un exemple. Le signe + est là dans la requête réelle – atemgnimag

Répondre

0

vous êtes requête commence en fait avec

SELECT name name FROM customer ... 

La colonne name est dupliqué - peut-être que le problème.

3

Cela dépend de votre SGBD, mais chaque variante SQL que j'ai vue nécessite des parens autour des sous-requêtes.

Essayez quelque chose comme:

... 

" movie.publisher = 'ABC' AND (" 
no_of_cust_ABC_movies + ") = (" + no_of_ABC_movies + ")"; 
1

Vous avez un problème avec le champ double nom sans être séparés par une virgule dans votre requête.

Si votre code est exactement comme indiqué ci-dessus, vous avez une erreur de compilation juste au-dessus de la dernière ligne manquante + pour concaténer les chaînes.

Si c'est une faute de frappe ci-dessous est ma suggestion.

  1. supprimer les doublons de sélection (utilisez un seul nom) ou
  2. Séparer les noms par une virgule (je ne vois pas un point de nom deux fois la sélection si)

Et votre dernière ligne est faux .. vous ne pouvez pas comparer deux requêtes select de cette façon .. Ajoutez simplement les clauses where requises.

(Vous devriez lire la base de données se joint d'abord, puis résoudre votre problème)

1

J'aime obtenir mes requêtes de travail dans le navigateur de requête ou un établi, puis les copier sur Java. Il le garde à une nouvelle chose à la fois ...