powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос получить данные из первой таблицы если значение равно 0
14 сообщений из 14, страница 1 из 1
Запрос получить данные из первой таблицы если значение равно 0
    #40025662
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, подскажите как сделать есть
таблица A (id, value), есть таблица B(id, value)

Нужно получить набор строк из A и B и если id встречается и в A и в B выбрать значение из A.

Сделал типа:
select * from A
union all
select * from B where not exists (select A.id from A where A.id = B.id)

Есть ли более красивое решение?
...
Рейтинг: 0 / 0
Запрос получить данные из первой таблицы если значение равно 0
    #40025665
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet

....
Есть ли более красивое решение?

А чем это не красивое?
...
Рейтинг: 0 / 0
Запрос получить данные из первой таблицы если значение равно 0
    #40025673
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

для недревних версий

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> ed
Wrote file afiedt.buf

  1  with A (id, value) as(
  2  select 0,'Киев' from dual union all
  3  select 3,'Львов' from dual
  4  )
  5  ,B(id, value) as(
  6  select 0,'Москва' from dual union all
  7  select 2,'Питер' from dual union all
  8  select 5,'Самара' from dual
  9  )
 10* select nvl(a.id,b.id) id,nvl(a.value,b.value) val,nvl2(a.id,'a','b') t from a full outer join b on (a.id=b.id)
SQL> /

        ID VAL    T
---------- ------ -
         0 Киев   a
         2 Питер  b
         5 Самара b
         3 Львов  a

SQL>




.....
stax
...
Рейтинг: 0 / 0
Запрос получить данные из первой таблицы если значение равно 0
    #40025676
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Уж лучше union all + not exists
...
Рейтинг: 0 / 0
Запрос получить данные из первой таблицы если значение равно 0
    #40025679
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
Stax,

Уж лучше union all + not exists


мож и лучше

но на вкус и цвет ...

.....
stax
...
Рейтинг: 0 / 0
Запрос получить данные из первой таблицы если значение равно 0
    #40025693
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
wsnet,

для недревних версий

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> ed
Wrote file afiedt.buf

  1  with A (id, value) as(
  2  select 0,'Киев' from dual union all
  3  select 3,'Львов' from dual
  4  )
  5  ,B(id, value) as(
  6  select 0,'Москва' from dual union all
  7  select 2,'Питер' from dual union all
  8  select 5,'Самара' from dual
  9  )
 10* select nvl(a.id,b.id) id,nvl(a.value,b.value) val,nvl2(a.id,'a','b') t from a full outer join b on (a.id=b.id)
SQL> /

        ID VAL    T
---------- ------ -
         0 Киев   a
         2 Питер  b
         5 Самара b
         3 Львов  a

SQL>





.....
stax
непрозрачно
...
Рейтинг: 0 / 0
Запрос получить данные из первой таблицы если значение равно 0
    #40025695
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
непрозрачно

не люблю прозрачный цвет

.....
stax
...
Рейтинг: 0 / 0
Запрос получить данные из первой таблицы если значение равно 0
    #40025731
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
Stax,

Уж лучше union all + not exists


А это как?
...
Рейтинг: 0 / 0
Запрос получить данные из первой таблицы если значение равно 0
    #40025735
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
env
Stax,

Уж лучше union all + not exists


А это как?


я не понял вопрос


ps
я вполне допускаю что union all + not exists оптимальнее,
и главное понятнне (прозрачнее )

.....
stax
...
Рейтинг: 0 / 0
Запрос получить данные из первой таблицы если значение равно 0
    #40025737
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще можно напрячь теорию множеств:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with A (id, value) as(
  select 0,'Киев' from dual union all
  select 3,'Львов' from dual
  )
  ,B(id, value) as(
  select 0,'Москва' from dual union all
  select 2,'Питер' from dual union all
  select 5,'Самара' from dual
  )
select * from A union all
select * from B minus
select B.id, B.value from A join B on A.id=B.id
...
Рейтинг: 0 / 0
Запрос получить данные из первой таблицы если значение равно 0
    #40025738
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ааа, "not exists" чтобы множество вычесть не прибегая к оператору minus.

Теперь понял.
...
Рейтинг: 0 / 0
Запрос получить данные из первой таблицы если значение равно 0
    #40025741
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне реально понравилось решение с full outer join.

А если таблиц больше двух, вместо nvl можно поставить coalesce, и все будет работать.

Код: plsql
1.
2.
3.
select coalesce(A.id,B.id) id, 
       coalesce(A.value,B.value) value 
  from A full outer join B on A.id=B.id
...
Рейтинг: 0 / 0
Запрос получить данные из первой таблицы если значение равно 0
    #40025865
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Мне реально понравилось решение с full outer join.

Особенно при условии, что уникальность ни в A ни в B условиями задачи не гарантируется.
...
Рейтинг: 0 / 0
Запрос получить данные из первой таблицы если значение равно 0
    #40025871
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
wsnet,

для недревних версий

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> ed
Wrote file afiedt.buf

  1  with A (id, value) as(
  2  select 0,'Киев' from dual union all
  3  select 3,'Львов' from dual
  4  )
  5  ,B(id, value) as(
  6  select 0,'Москва' from dual union all
  7  select 2,'Питер' from dual union all
  8  select 5,'Самара' from dual
  9  )
 10* select nvl(a.id,b.id) id,nvl(a.value,b.value) val,nvl2(a.id,'a','b') t from a full outer join b on (a.id=b.id)
SQL> /

        ID VAL    T
---------- ------ -
         0 Киев   a
         2 Питер  b
         5 Самара b
         3 Львов  a

SQL>





.....
stax


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> WITH A (ID, VALUE) AS(
 SELECT 0, NULL FROM dual
 ),
 b
 (ID, VALUE) AS(
 SELECT 0,'Москва' FROM dual
 )
 SELECT NVL(a.id,b.id) ID,NVL(a.value,b.value) val,NVL2(a.id,'a','b') t FROM a FULL OUTER JOIN b ON (a.id=b.id)

        ID VAL    T
---------- ------ -
         0 Москва a
1 row selected.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос получить данные из первой таблицы если значение равно 0
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]