2013-02-22 4 views
0

J'essaie de lier deux tables en SQL mais elle ne fait pas ce que je veux. J'ai une table1 avec deux champs id, Total et autre Table2 qui contient 20 champs que je veux extraire seulement 5 ID, nom, adresse, ville, province. La requête que j'ai est la suivante:Requête de relation dans les enregistrements de répétition SQL

SELECT Table1.id, Table2.name, Table2.address, Table2.city, Table2.province, Table1.Total 
    FROM Table1 INNER JOIN Table2 ON 
WHERE Table2.id Table1.Total Table1.id => = "& CLng (number1.Text) & 
    "AND Table1.Total <=" & CLng (number2.Text) & 
"ORDER BY ASC Table2.name" 

L'intention est de relier les deux tableaux, mais le problème est que la requête résultant a répété les résultats. Je pense que la raison en est, par exemple, que j'ai des données avec le même identifiant mais avec des noms différents et qu'il essaie de mettre les différentes données dans des rangées différentes en dépit d'avoir le même identifiant.

J'ai passé beaucoup de temps à chercher une solution mais je ne la trouve pas.

+0

Votre syntaxe SQL est pas encore correcte. Vous semblez avoir extrait partiellement le SQL de la chaîne que vous construisez dans VB6, mais vous ne l'avez pas fait complètement. En l'état, la clause ON n'a aucune condition de jointure; la clause WHERE a un premier terme mal formé, et le résidu souffre de problèmes avec des guillemets etc. –

+0

Si vous dites que la requête renvoie 20 enregistrements mais que vous voulez seulement 5, c'est ce qu'on appelle une requête n top. La façon d'y parvenir dépend du type db et vous n'avez pas spécifié le vôtre. En outre, sur StackOverflow, ajoutez 4 espaces au début de chaque ligne de code. Cela le fera apparaître comme du code et permettra aux gens de vous aider plus facilement. –

Répondre

0

UTILISATION jointure externe gauche au lieu de innner REJOIGNEZ

Vérifiez sql. Peut-être vous attendez-vous comme ci-dessous.

SELECT Table1.id, Table2.name, Table2.address, Table2.city, Table2.province, Table1.Total 
FROM Table1 
LEFT OUTER JOIN Table2 
     ON Table2.id =Table1.id 

WHERE Table1.Total = '' AND Table1.Total <= '' 
ORDER BY Table2.name ASC 
+0

LOJ n'est pas la solution universelle pour joindre des problèmes; il n'est certainement pas susceptible d'être la solution à ce problème. Utilisez LOJ seulement si nécessaire. –

1

La clause ON n'est pas spécifiée correctement. Essayez de supprimer le mot WHERE afin que vous restreigniez réellement votre jointure aux lignes pertinentes, plutôt que de faire une jointure complète.

0

essayer cette

SELECT Table1.id, Table2.name, Table2.address, Table2.city, Table2.province, Table1.Total 
FROM Table1 INNER JOIN Table2 ON 
Table2.id = Table1.id WHERE Table1.Total >= CLng(number1.Text) AND Table1.Total <= CLng(number2.Text) 
GROUP BY Table2.name 
ORDER BY ASC Table2.name" 
0

Vous pouvez utiliser la déclaration "DISTINCT" pour revenir seulement des valeurs distinctes (différentes). Les lignes en double sont renvoyées une seule fois.

Votre syntaxe de requête SQL est incorrecte. Peut-être qu'il retourne des lignes en double parce que cela. Mais si après l'avoir corrigé, retourne toujours des lignes en double, Table2 doit avoir plusieurs lignes avec le même identifiant. Dans ce cas, vous pouvez utiliser l'instruction DISTINCT.

La requête SQL correcte est:

SELECT DISTINCT Table1.id, Table2.name, Table2.address, Table2.city, Table2.province, Table1.Total 
FROM Table1 INNER JOIN Table2 ON Table1.id = Table2.id 
    AND Table1.total BETWEEN minValue AND maxValue 
ORDER BY ASC Table2.name 

(minValue et maxValue sont des nombres)

dans la syntaxe VB

" SELECT Table1.id, Table2.name, Table2.address, Table2.city, Table2.province, Table1.Total " _ 
" FROM Table1 INNER JOIN Table2 ON Table1.id = Table2.id " & _ 
"  AND Table1.total BETWEEN " & CLng (number1.Text) & "AND " & CLng (number2.Text) & _ 
"ORDER BY ASC Table2.name " 
Questions connexes