SQL Выберите дату из второй таблицы, если идентификатор совпадает

У меня есть две таблицы Security и CallPut. Безопасность (таблица 1) содержит security_id и зрелость_дата (значения, отличные от пустых), и CallPut (таблица 2), которая имеет security_id и Odate (которые не являются нулевыми значениями, которые содержат значения формата даты и времени). Я хочу выбрать все строки из безопасности (таблица 1), но в зрелость_дата я хочу значение из столбца odate вместо зрелости_даты, где идентификатор безопасности существует в Callput (таблица 2) и совпадает с таблицей безопасности

Например, безопасность (таблица 1)

Security_id|Maturity_date
abcd        25Jan2020
bcde        25jan2021 

Callput (таблица 2)

Security_id|Odate
abcd        25Jan2015 

Требуемый вывод

Security_id|Maturity_date
abcd        25Jan2015 (since here id is there in callput it takes odate)
bcde        25jan2021 (since here id is not there in callput it takes maturity date)

Я использую oracle sql Пожалуйста, помогите. заранее спасибо


person user2177784    schedule 16.03.2013    source источник


Ответы (3)


select s.Security_id, nvl(c.odate, s.Maturity_date) as Maturity_date
from Security s
left join
Callput c
on
s.Security_id = c.Security_id

p.s. только что заметил, что это был вопрос Oracle, мой код предназначен для MS SQL Server
EDIT: исправлен синтаксис Oracle.

person roman m    schedule 16.03.2013
comment
есть ли способ сделать это с объединением? просто любопытно, потому что я пытался с этим много раз, но не мог этого сделать. - person user2177784; 23.03.2013
comment
@user2177784 user2177784 не может говорить за Oracle, но в MS SQL ISNULL() в основном такой же, как COALESCE() с двумя параметрами - person roman m; 23.03.2013

select s.* from security as s left join callput as c on (c.security_id = s.security_id);

Непроверено, но вы хотите использовать объединение. Вы можете узнать больше о объединениях в обширной документации Oracle по адресу http://docs.oracle.com/cd/B28359_01/server.111/b28286/queries006.htm

person Corbin Spicer    schedule 16.03.2013

person    schedule
comment
привет, я читал немного больше о nvl, разве он не используется только для замены нулевых значений. будет ли он работать и для ненулевых значений. пожалуйста посоветуй - person user2177784; 23.03.2013
comment
Если вы хотите заменить ненулевые значения, вам нужно найти предложение «case when» в PL/SQL. Попробуйте отредактировать свой вопрос, чтобы он был более конкретным, и я или кто-то другой постараюсь ответить. Внешнее (левое) соединение двух таблиц будет генерировать нули в случае несоответствия, поэтому я использовал NVL. - person Andrea Colleoni; 23.03.2013