Внутреннее объединение одного стола против многих других - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть таблица A со столбцами (Id, Value)
и таблица B с столбцами (BId, Id, ..) и таблица C со столбцами (CId, Id, ...)

Мне нужно выполнить внутреннее объединение этих таблиц следующим образом

 select a.Id,a.Value from A a
 inner join B b on b.Id=a.Id
 inner join C c on c.Id=a.Id
 where <many conditions on table B and C>

Как мне добиться того же.Теперь, когда я просто запускаю запрос

 select a.Id,a.Value from A a
 inner join B b on b.Id=a.Id
 inner join C c on c.Id=a.Id

, он ничего не возвращает .. пожалуйста, помогите.

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

Пример данных:

A
1
2
3

B
2

C
3

тогда я хочу выбрать

A
2
3

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Итак, после ваших комментариев кажется, что вы хотите что-то вроде этого:

select a.Id,a.Value from A a
 inner join B b on b.Id=a.Id
where <many conditions on table B>
UNION ALL
SELECT a.Id, a.Value from A
 inner join C c on c.Id=a.Id
 where <many conditions on table C>
0 голосов
/ 21 февраля 2011

Пока поля совпадают по идентификатору из A -> B и A -> C, и у вас нет никаких других условий соединения, вы должны иметь возможность видеть совпадающие строки.

Я не мог понять вашу мысль о том, что B и C Id не совпадают. если a.id = b.id и a.id = c.id, не означает ли это автоматически, что b.id = c.id?

В любом случае, в подобных ситуациях я пытаюсь выполнить внешнее соединение A на B и C и посмотреть, действительно ли совпадают строки, которые, на мой взгляд, совпадают.

select a.Id,a.Value from A a
 left outer join B b on b.Id=a.Id
 left outer join C c on c.Id=a.Id
 where (b.id is not null or c.id is not null) 
       /* Matching record found in b or c */

РЕДАКТИРОВАТЬ: Исходя из ваших требований, вы можете использовать подход, предложенный Lamak выше (Использование UNION Alls), или если вы уверены, что для каждой записи в A у вас будет только одна запись в B и только один в C и только один столбец, вы можете использовать подход скалярного подзапроса .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...