Оператор SQL SELECT с использованием трех таблиц - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь написать оператор SQL Select для переноса некоторых данных из среды Sybase в среду MongoDB, и я просто пытаюсь выяснить правильный синтаксис для трех разных таблиц.

По существу, чтоМне нужно сделать, это сделать INNER JOIN для двух таблиц, а затем выполнить проверку соответствия с 3-ей таблицей.Три имени таблицы: «ar_notes», «customer_service_xref» и «service_notes_details»

Это то, что я пробовал:

SELECT * FROM ar_notes arn
      LEFT JOIN customer_service_xref csx ON arn.customer_service_xref_id = csx.id_number
      WHERE arn.visit_date = service_notes_details.date_of_visit

Это не работает.Я получаю ошибку корреляции.

Как должен выглядеть синтаксис при использовании трех таких таблиц?

1 Ответ

0 голосов
/ 22 октября 2018

Вы сказали, что вам нужно ВНУТРЕННЕЕ СОЕДИНЕНИЕ среди трех таблиц, но ваш запрос выполняет ЛЕВОЕ СОЕДИНЕНИЕ между двумя и пытается выполнить другое соединение в предложении WHERE, не ссылаясь на эту таблицу в предложении FROM.

Чтобы просто исправить запрос:

SELECT * 
FROM service_notes_details snd, ar_notes arn
INNER JOIN customer_service_xref csx ON arn.customer_service_xref_id = csx.id_number
WHERE arn.visit_date = snd.date_of_visit

Это то, что вы должны использовать в текущем синтаксисе SQL:

SELECT * 
FROM ar_notes arn
INNER JOIN customer_service_xref csx ON arn.customer_service_xref_id = csx.id_number
INNER JOIN service_notes_details ON arn.visit_date = service_notes_details.date_of_visit

Для ясности, это будет возвращать только строки в ar_notes, которые имеют соответствующие значения в customer_service_xref (присоединение customer_service_xref_id) и service_notes_details (присоединение visit_date).Ваш исходный запрос с использованием LEFT JOIN вернет строки из ar_notes, даже если не было совпадения customer_service_xref_id.

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