Oracle дублирует поле, но все еще корректно - PullRequest
0 голосов
/ 30 мая 2018

Итак, я построил запрос для моей команды руководителей, который был правильным, но я не понимаю, почему оракул дал мне правильный ответ.

У меня есть 3 таблицы, из которых мне нужно было получить данные, чтобы получитьобщая сумма счета.

Вот мой запрос (пожалуйста, прости меня, мой второй пост, и я не уверен, как правильно отформатировать мои запросы)

select b.total_amount_billed as billed from t1.billing_information b 
where b.billing_no in 
(select h.billing_no 
 from t1.res_history h where h.res_seq_no in 
(Select r.reservation_seq_no 
 from t1.res r where r.customer_order_no in ('THO40000') ))

, поэтому в самом глубоком выборе яВозьмите порядковый номер, где мой номер заказа клиента был THO40000, этот запрос возвращает 2 порядковых номера.

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

при окончательном выборе возвращается моя общая сумма счета, если она совпадает с моими найденными номерами счетов, в моем случае - $ 110.

запросработает, но то, что я не понимаю, почему это не дублируется?почему он не возвращает 110, за каждый раз, когда он находит 312000, давая мне 2 записи из 110?номер биллинга - это PK в таблице billing_information.Я не уверен, почему это работает без меня, используя отдельное ключевое слово в запросе для номера счета.

в любом случае спасибо за помощь, я сделаю все возможное, чтобы объяснить, если у вас есть вопросы!

1 Ответ

0 голосов
/ 30 мая 2018

Вы сохранены, потому что вы использовали IN для получения значений billing_no, а не INNER JOIN между двумя таблицами, используя b.billing_no = h.billing_no.Объединение дублировало бы записи, но ваш запрос IN по сути таков:

select b.total_amount_billed as billed
from t1.billing_information b 
where b.billing_no in (312000, 312000);

Если в billing_information есть одна строка, имеющая billing_no, равную 312000, она находится в списке, поэтому условие WHERE выполняется и оно включено в результаты.Тот факт, что он присутствует в списке дважды, не делает условие IN «более верным».

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