Показать поле из другой таблицы в SQL - PullRequest
0 голосов
/ 16 марта 2010

Я новичок с SQL ...

Теперь я хочу отобразить некоторые экземпляры AddrDistances из DevExpress CxGrid с 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

Этот SQL работает, и результат:

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

Результат, который я хочу получить, таков:

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

Итак, количество строк правильное, но я хочу заменить числа в FromAddress и ToAddress строками из другой таблицы. Цифры показывают здесь только жирный шрифт. Каждый объект в базе данных имеет уникальный жирный шрифт. Указанные выше адреса хранятся в таблице Address и имеют поле City с колонкой и полужирным шрифтом в качестве ключа.

Что я должен написать в SQL, чтобы получить это право? Есть ли в CxGrid что-то, что могло бы помочь здесь?

Привет

EDIT1: После некоторых экспериментов я получил этот SQL, который, кажется, работает:

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

Большое спасибо за помощь! Питер получил ответ, так как я думаю, что это было наиболее ясно. Кстати, я использую InterBase 2009 и думаю, что он использует диалект SQL 3. Одно из отличий было то, что он не обрабатывает AS после JOIN.

Ответы [ 3 ]

4 голосов
/ 16 марта 2010

Вы хотите присоединиться к другой таблице. Вы не указали вариант sql, но из-за синтаксиса он выглядит как SQL Server / TSQL.

Попытка:

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
1 голос
/ 16 марта 2010

попробуйте присоединиться к этим идентификаторам:

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
1 голос
/ 16 марта 2010

Вам нужно создать JOIN на таблице City.

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
  • без * s: o)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...