2015-11-02 3 views
0

Я пытаюсь выбрать C# и odbc из следующих таблиц.MS Access Выберите несколько объединений

LinkTab (FromDevID, FromPort, ToDevID, ToPort) 
DevList (ID,DevName...) 

Результат должен выглядеть

FromDevName | FromPort | ToDevName | ToDevPort 

я уже пробовал следующее заявление:

SELECT dev1.DevName, lt.FromPort, dev2.DevName, lt.ToPort 
FROM (LinkTab lt 
INNER JOIN DevList dev1 ON lt.FromDevID = dev1.ID) 
INNER JOIN devList dev2 ON lt.ToDevID = dev2.ID 

, и я не мог получить все записи. Я думаю, что есть ошибка в моем состоянии соединения.

+1

Вы выполняете 'inner' join, который возвращает только записи, которые соответствуют BOTH-сторонам соединения. если объединение 'dev1' производит различное количество записей, чем' dev2', они будут подавлены. –

+0

@MarcB, который я должен использовать после этого? – ginandjuice

+0

'left' или' right', или 'full outer', возможно. –

ответ

1

Предположительно, вам нужно left join:

SELECT dev1.DevName, lt.FromPort, dev2.DevName, lt.ToPort 
FROM (LinkTab lt LEFT JOIN 
     DevList dev1 
     ON lt.FromDevID = dev1.ID 
    ) LEFT JOIN 
    devList dev2 
    ON lt.ToDevID = dev2.ID; 

Причина Ваш запрос не будет возвращать все строки потому, что ПЕЧНЫЕ не всегда совпадают. Если это так, то INNER JOIN будет отфильтровывать строки с непревзойденными устройствами. A LEFT JOIN сохранит все строки в первой таблице, назначив NULL для столбцов из второй и третьей таблиц.

Смежные вопросы