Извлечь данные из других таблиц, даже если эти данные отсутствуют - PullRequest
0 голосов
/ 21 февраля 2012

То, что я пытаюсь сделать, это извлечь все данные из одной таблицы, а затем, если данные доступны в другой таблице, также потянуть это поле, если не просто отображать N / A.

например, у меня есть таблица информации о заказе

product code, description,qty ect

и тогда у меня есть таблица для списка комплектации

(primary key)picking list number

но заказ должен быть принят до создания номера списка комплектации. поэтому я хочу отобразить всю информацию в таблице заказов, а затем, если это номер списка комплектации, отобразить это, если не просто отобразить N / A.

Просто подумал, возможно ли это.

Ответы [ 3 ]

2 голосов
/ 22 февраля 2012

Left Outer Join ... должен перечислить все элементы из "левой" таблицы и те, которые соответствуют условиям соединения справа.

Помните, что любые условия в выборе записей работают со всеми записями. Если вы не будете осторожны, использование поля из «правильной» таблицы в вашем выборе может превратить запрос в запрос INNER.

0 голосов
/ 20 ноября 2012

К сожалению, если не использовать команду, Crystal Reports не будет поддерживать вид ON. Лучше всего либо командовать, либо использовать хранимые процедуры для получения ваших данных.

0 голосов
/ 16 марта 2012

Я не мог больше терпеть ... объяснение комментария LOJ / "условий".

У вас есть условие "ON", которое является частью LOJ.
У вас также есть условия "WHERE", которые являются частью всего запроса.

Существует большая разница между

SELECT 
   PERSONS_NAME,
   PERSONS_ADDRESS,
   PERSONS_CITY, 
   PERSONS_STATE
FROM
  MYRECORDS MR
    LEFT OUTER JOIN
      MYDETAILS MD
        ON  MR.MYID = MD.MYID
WHERE
   NOT PERSONS_ADDRESS IS NOT NULL
   AND
   (some other wx clauses)

и

SELECT 
   PERSONS_NAME,
   PERSONS_ADDRESS,
   PERSONS_CITY, 
   PERSONS_STATE
FROM
  MYRECORDS MR
    LEFT OUTER JOIN
      MYDETAILS MD
        ON  MR.MYID = MD.MYID  
            AND   
            NOT PERSONS_ADDRESS IS NOT NULL
WHERE
   (some other wx clauses)

Первая даст вам ТОЛЬКО записи, где существует АДРЕС ... пропуская записи, где только PERSONS_NAMEсуществует.

Второй даст вам ВСЕ PERSONS_NAMEs, но ВКЛЮЧИТ адресную информацию, когда PERSONS_ADDRESS существует.

Это плохой пример выше, но он иллюстрирует проблему:

Есливы используете поле в RIGHT TABLE в предложении WHERE, LOJ становится эквивалентом INNER JOIN - теряется значение LOJ.

Если вы добавляете условие в предложение ON, LOJ работаетКАК ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ, но все еще сохраняет возможность включать ВЫБРАННЫЕ записи из ПРАВОЙ ТАБЛИЦЫ.

Извините за все УДЕРЖАННЫЕ слова, но уже поздно, мое видение мутное, и я хотел кое-что подчеркнутьДругой.Я забыл сейчас.

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