Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Добрейшего всем вечера.  [new]
Vitaly1999
Member

Откуда:
Сообщений: 1
Вопрос: Как я могу сравнить две строки таблицы при помощи sql.
конкретнее у меня есть таблица
--Таблица адресов
create table ADDRESSES
(
id number(38,0) not null,
client_id number(38,0) not null,
a_type number(38,0) not null,
city varchar2(50) not null,
street varchar2(50) null,
house varchar2(50) null,
flat varchar2(50) null,
created date default sysdate not null,
archive char(1) default 'N' not null
)

в ней интересны 4 поля
city varchar2(50) not null,
street varchar2(50) null,
house varchar2(50) null,
flat varchar2(50) null,

т е может быть заполнен лишь город а может город и улица , также могут быть заполнены все 4 поля .

я составил запрос, необходимо добавить ещё условие проверку на максимальную заполненность этих полей
select distinct cl.id, cl.name AS name, (select c_info from contacts where c_type = 1 AND cl.id = client_id AND archive = 'Y' AND created in (
select max(created) from contacts where c_type = 1 AND cl.id = client_id AND archive = 'Y')) phone,
(select c_info from contacts where c_type = 2 AND cl.id=client_id AND archive = 'Y' AND created in (
select min(created) from contacts where c_type = 2 AND cl.id = client_id AND archive = 'Y')) e_mail,
adr.city address
from clients cl
left join contacts con on cl.id = con.CLIENT_ID
left join addresses adr on cl.id = adr.CLIENT_ID
where
adr.id in (select a.id from addresses a where a.a_type in (select max(a_type) from addresses where cl.id = client_id AND archive = 'Y')
AND
a.city
AND --самая последняя дата добавления адреса
a.created in (select max(created) from addresses where a_type = a.a_type AND cl.id = client_id AND archive = 'Y'))
order by cl.id

з ы я ещё совсем новичок готов принять любую критику и если есть уже ссылки по теме пришлите пожалуйста
4 окт 18, 01:51    [21694723]     Ответить | Цитировать Сообщить модератору
 Re: Добрейшего всем вечера.  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1117
"Сравнить" и "проверить максимальную заполненность" - две разные задачи, причем практического применения второй сходу не придумаю. Обычно есть минимальная заполненность, ее обеспечивают constraints.

Новичку советы: использовать тег SRC и предоставлять данные в виде with.

Простой способ сравнения по нескольким полям - minus.

with t1 as (select 'Moscow' city, 'Red square' street, 1 house, 1 flat from dual),
t2 as (select 'Moscow' city, 'Red square' street, 1 house, null flat from dual)
select * from t1
minus
select * from t2
4 окт 18, 07:18    [21694753]     Ответить | Цитировать Сообщить модератору
 Re: Добрейшего всем вечера.  [new]
Viewer
Member

Откуда: Самара
Сообщений: 5230
Vitaly1999,

http://www.sql.ru/forum/rules.aspxр
Правила форума на SQL.RU
Не рекомендуется:
Публиковать сообщения с бессмысленными темами.
Например: <Люди помогите>, <Проблема!!>, <Срочно нужна помощь!>, <может знаете?> и т.д.
4 окт 18, 09:09    [21694804]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить