2010-03-16 8 views
0

Je suis un débutant avec SQL ...Champ d'affichage d'une autre table dans SQL

Maintenant, je veux afficher certains cas de AddrDistances de DevExpress CxGrid avec SQL.

Select Cast((DistanceAsMeters * 0.001) as Decimal(8,1)) DistanceAsKm, bold_id, created, fromAddress, toAddress 
From AddrDistance 
Where DistanceAsMeters = 0 and PseudoDistanceAsCostKm = 0 
     and not AddrDistance.bold_id in (select bold_id from DistanceQueryTask) 
Order By Created Desc 

Ce SQL fonctionne et le résultat est:

DistanceAsKM Bold_ID Created  FromAddress ToAddress 
0   134808  16.02.2010 121795  134570 
0   121701  10.03.2010 120850  122991 

Le résultat que je veux est la suivante:

DistanceAsKM Bold_ID Created  FromAddress ToAddress 
0   134808  16.02.2010 Kalmar  Stockholm 
0   121701  10.03.2010 Falkenberg Oslo 

Ainsi, le nombre de lignes est juste, mais je veux remplacer le numéros dans FromAddress et ToAddress avec des chaînes d'une autre table. Les chiffres montrent ici est juste le boldid. Chaque objet de la base de données possède un boldid unique. Les adresses ci-dessus sont stockées dans la table Address et ont un champ City avec la colonne et un boldid comme une clé.

Que devrais-je écrire en SQL pour bien faire les choses? Y at-il quelque chose dans le CxGrid qui pourrait aider ici?

Cordialement

EDIT1: Après quelques expériences que je suis arrivé ce SQL qui semble fonctionner:

SELECT DistanceAsMeters, Bold_Id, Created, AddressFrom.CityName_CO as FromCity, AddressTo.CityName_CO as ToCity 
FROM AddrDistance 
LEFT JOIN Address AddressFrom ON AddrDistance.FromAddress = AddressFrom.Bold_Id 
LEFT JOIN Address AddressTo ON AddrDistance.ToAddress = AddressTo.Bold_Id 
Where DistanceAsMeters = 0 and PseudoDistanceAsCostKm = 0 
     and not AddrDistance.bold_id in (select bold_id from DistanceQueryTask) 
Order By Created Desc 

Merci beaucoup pour l'aide! Peter a obtenu la réponse car je pense que c'était le plus clair. BTW J'utilise InterBase 2009 et je pense qu'il utilise le dialecte SQL 3. Une différence est qu'il ne gère pas AS après JOIN.

Répondre

4

Vous souhaitez vous joindre à l'autre table. Vous n'avez pas spécifié de variante sql, mais en regardant la syntaxe, elle ressemble à SQL Server/TSQL.

Essayez:

Select Cast((DistanceAsMeters * 0.001) as Decimal(8,1)) DistanceAsKm, bold_id, created, AddressFrom.AddressName, AddressTo.AddressName 
From AddrDistance 
JOIN Address AS AddressFrom ON AddrDistance.fromAddress = AddressFrom.AddressId 
JOIN Address AS AddressTo ON AddrDistance.toAddress = AddressTo.AddressId 
Where DistanceAsMeters = 0 and PseudoDistanceAsCostKm = 0 
     and not AddrDistance.bold_id in (select bold_id from DistanceQueryTask) 
Order By Created Desc 
+0

Si l'FROMADDRESS ou toaddress sont annulable, ou il n'y a pas d'intégrité relationnelle vous devez utiliser une jointure externe 'GAUCHE OUTER JOIN Adresse AS AddressFrom ON AddrDistance.fromAddress = AddressFrom.AddressId GAUCHE OUTER JOIN Adresse AS AddressTo ON AddrDistance.toAddress = AddressTo.AddressId' –

1

Vous devrez créer un JOIN sur la table Ville.

Select Cast((DistanceAsMeters * 0.001) as Decimal(8,1)) DistanceAsKm, bold_id, created, fromAddress, toAddress 
From AddrDistance 
**JOIN City c 
ON ad.bold_id = c.bold_id -- Or whatever the column is** 
Where DistanceAsMeters = 0 and PseudoDistanceAsCostKm = 0 
     and not AddrDistance.bold_id in (select bold_id from DistanceQueryTask) 
Order By Created Desc 
  • sans * s: o)
+2

vous avez réellement besoin de faire deux jointures, un pour le * A * et un pour le * FROM * –

1

essayer de rejoindre sur ces ID:

Select 
    Cast((DistanceAsMeters * 0.001) as Decimal(8,1)) DistanceAsKm, bold_id, created 
     ,f.DisplayText, t.DisplayText      ---<<<<<< 
    From AddrDistance 
     JOIN OtherTable f ON AddrDistance.fromAddress=f.PK ---<<<<<< 
     JOIN OtherTable t ON AddrDistance.toAddress=t.PK ---<<<<<< 
    Where DistanceAsMeters = 0 and PseudoDistanceAsCostKm = 0 
     and not AddrDistance.bold_id in (select bold_id from DistanceQueryTask) 
    Order By Created Desc 
Questions connexes