2010-07-05 7 views
0

Étant donné 2 tables de base, 1 table qui stocke la relation entre eux avec quelques attributs supplémentaires; prendre quelques valeurs d'attribut supplémentaires en tant qu'entrée de l'utilisateur, en fonction de cette relation d'extraction de la table de relation.Comment faire une requête SQL comme ça?

Cette information a l'ID des valeurs principales (personne et animal) et non les noms. Je veux afficher les noms à l'écran, comme d'après l'entrée que vous avez donnée aux enregistrements qui ont trouvé que cette personne a cet animal avec lui.

select DISTINCT table0.person_name, table5.animal_name 
     from table1 

INNER JOIN table0, table5 
     on table1.person_id=table0.person_id 
      and 
     table1.animal_id=table5.animal_id 

where table1.aa=input1 
     and table1.bb=input2 
     and table1.cc=input3 
     and table1.dd=input4 
+4

Ce sont les pires noms que j'ai jamais vu. – SLaks

+0

Pouvez-vous préciser ce qui ne fonctionne pas en ce moment? c'est-à-dire quel est le problème que vous essayez de résoudre? –

+0

2 tables de base, 1 table qui stocke la relation entre eux avec un fex attributs supplémentaires en prenant la valeur des attributs supplémentaires fex en tant qu'entrée de l'utilisateur, sur la base de cette extraction de la table de relation. cette information a l'identifiant des valeurs principales (personne et animaux) pas les noms je veux afficher les noms sur l'écran comme selon l'entrée u a donné les enregistrements qui trouvés sont cette personne a cet animal avec lui c'est, – user287745

Répondre

1

Vous avez au moins trois erreurs.

  • La clause WHERE devrait venir après la clause JOIN .. ON, non pas avant.
  • Vous ne pouvez pas faire référence aux colonnes du tableau 5 car elles n'apparaissent pas dans la liste FROM. Vous ne devriez pas écrire ON xxx AND ON yyy. Il suffit d'écrire ON xxx AND yyy.

Autres points à considérer:

  • Etes-vous sûr que vous vouliez dire FULL OUTER JOIN et non INNER JOIN?
  • Pourquoi ajoutez-vous le distinct? Si une personne possède deux animaux du même nom, voulez-vous vraiment retourner une seule ligne? D'où viennent les valeurs input1, ..., input4?
  • Je pense que table0 devrait être renommé person, table5-animal et table1 à person_animal pour le rendre plus facile à comprendre le but de chaque table.

Ma meilleure estimation de ce que vous vouliez dire est ceci:

SELECT table0.person_name, table5.animal_name 
FROM table1 
JOIN table0 ON table1.person_id = table0.person_id 
JOIN table5 ON table1.animal_id = table5.animal_id 
WHERE table1.aa = input1 
    AND table1.bb = input2 
    AND table1.cc = input3 
    AND table1.dd = input4 
+0

et qu'est ce qu'une jointure complète? – Pondidum

+0

@Pondidum: http://www.w3schools.com/sql/sql_join_full.asp –

+0

Byers s'il vous plaît vérifier – user287745

Questions connexes