ORACLE / SQL - объединение 3 таблиц, которые не все взаимосвязаны - PullRequest
2 голосов
/ 23 апреля 2011

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

Допустим, у меня есть таблицы A, B, C

вот отношения

A.type = B.type

A.model = C.model

Что мне нужно сделать, так это внутреннее соединение A и B и вернуть все соответствующие записи A. Затем мне нужно извлечь записи из C, которые соответствуют предыдущему соединению.

Или, другими словами, все записи в C, которые находятся в A, где A находится в B

Надеюсь, это имеет смысл. Извините за отсутствие данных примеров.

Я пробовал это

select
    c.*
from
    c, a, b
where
    c.model_ = a.model_
    and a.type_ = b.type_

но получите это сообщение 'Ошибки: в запросе есть MERGE JOIN CARTESIAN. Вы должны исправить предложение where, чтобы правильно объединить таблицы в операторе select. '

Ответы [ 3 ]

3 голосов
/ 23 апреля 2011

Я знаю, что это вопрос стиля, но, по моему мнению, объединения в стиле ANSI делают это намного понятнее:

SELECT c.*
FROM c
JOIN a ON a.model = c.model
JOIN b on b.type = a.type

Если у вас есть несколько совпадающих элементов в a или b, этот запрос вернет дубликаты.Вы можете добавить DISTINCT или переписать его как запрос EXISTS:

SELECT *
FROM c
WHERE EXISTS (SELECT 1
              FROM a
              JOIN b ON b.type = a.type
              WHERE a.model = c.model)

Я думаю, что это также должно дать тот же результат, если в модели отсутствуют значения NULL:

SELECT *
FROM c
WHERE c.model IN (SELECT a.model
                  FROM a
                  JOIN b ON b.type = a.type)
0 голосов
/ 23 апреля 2011

Без выборок данных трудно понять реальную проблему и подтвердить запрос.

ты пробовал ..

Select c.*
   from a,b,c
    where a.type = b.type
      and a.model = c.model;

Вы теряете некоторые записи или видите дополнительные записи, которые не ожидаете увидеть?

Приведенный выше запрос даст только записи в c, которые находятся в a и где записи соответствуют критерию в b.

0 голосов
/ 23 апреля 2011

просто также присоединитесь к C с условием AND

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