Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / MINUS странное поведение / 13 сообщений из 13, страница 1 из 1
26.05.2021, 17:44
    #40073240
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MINUS странное поведение
У меня как-то странно ведет себя оператор MINUS.

Есть две таблички одинаковые по структуре, именам и порядку полей. Без индексов.
В каждой примерно 3 млн записей

я пишу:

Код: plsql
1.
2.
3.
select a,b,c,d from tab1
minus
select a,b,c,d from tab2



Получаю непустой результат

тогда я решаю сократить выборку, беру из результата некое значение ну скажем поля b и пишу:
Код: plsql
1.
2.
3.
select a,b,c,d from tab1 where b = 123
minus
select a,b,c,d from tab2 where b = 123



и получаю пустой результат.

Тогда я беру и делаю отдельные выборки по каждой таблице select a,b,c,d from tab1 where b = 123 и select a,b,c,d from tab2 where b = 123

и сравниваю их глазами. Записи и их количество одинаковые.

Я чего-то не понимаю, видимо.
...
Рейтинг: 0 / 0
26.05.2021, 18:10
    #40073250
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MINUS странное поведение
Maxifly
У меня как-то странно ведет себя оператор MINUS.

Есть две таблички одинаковые по структуре, именам и порядку полей. Без индексов.
В каждой примерно 3 млн записей

я пишу:

Код: plsql
1.
2.
3.
select a,b,c,d from tab1
minus
select a,b,c,d from tab2



Получаю непустой результат

тогда я решаю сократить выборку, беру из результата некое значение ну скажем поля b и пишу:
Код: plsql
1.
2.
3.
select a,b,c,d from tab1 where b = 123
minus
select a,b,c,d from tab2 where b = 123



и получаю пустой результат.

Тогда я беру и делаю отдельные выборки по каждой таблице select a,b,c,d from tab1 where b = 123 и select a,b,c,d from tab2 where b = 123

и сравниваю их глазами. Записи и их количество одинаковые.

Я чего-то не понимаю, видимо.


в непустом результате есть строки с b = 123?

ps

select rowid,t.* from tab1/2 t where (a,b,c,d) in (
select a,b,c,d from tab1
minus
select a,b,c,d from tab2
)

а дальше разборки по ровиду


зыы
смотреть план, мож действительно жучок завелся
.....
stax
...
Рейтинг: 0 / 0
26.05.2021, 18:12
    #40073251
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MINUS странное поведение
Выполните в SQL*Plus
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
DESCRIBE tab1;
DESCRIBE tab2;

CREATE TABLE test_minus
AS
select 'TAB-1' AS tab, a,b,c,d from tab1 where b = 123
UNION
select 'TAB-2',a,b,c,d from tab2 where b = 123;

DESCRIBE test_minus;

SELECT tab, COUNT(*)
FROM test_minus
GROUP BY tab;

SELECT a,b,c,d FROM test_minus WHERE tab = 'TAB-1'
MINUS
SELECT a,b,c,d FROM test_minus WHERE tab = 'TAB-2';


и покажите результат
...
Рейтинг: 0 / 0
26.05.2021, 18:18
    #40073253
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MINUS странное поведение
Maxifly
и получаю пустой результат.

Maxifly
Записи и их количество одинаковые.

ну так и должно быть
...
Рейтинг: 0 / 0
26.05.2021, 18:18
    #40073254
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MINUS странное поведение
SQL*Plus,
не смогу результат показать. Это у заказчика на площадке.
Что мне хоть искать? Расхождения в структуре таблиц и количество записей, которые MINUS посчитал за различные?
...
Рейтинг: 0 / 0
26.05.2021, 18:18
    #40073255
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MINUS странное поведение
SQL*Plus,

Maxifly

тогда я решаю сократить выборку, беру из результата некое значение ну скажем поля b и пишу:
Код: plsql
1.
2.
3.
select a,b,c,d from tab1 where b = 123
minus
select a,b,c,d from tab2 where b = 123



и получаю пустой результат.

Тогда я беру и делаю отдельные выборки по каждой таблице select a,b,c,d from tab1 where b = 123 и select a,b,c,d from tab2 where b = 123

и сравниваю их глазами. Записи и их количество одинаковые .

Я чего-то не понимаю, видимо.


запутали меня

имхо, так и должно быть для 123

.....
stax
...
Рейтинг: 0 / 0
26.05.2021, 18:22
    #40073257
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MINUS странное поведение
[quot Stax#22327608]
Maxifly
У меня как-то странно ведет себя оператор MINUS.

в непустом результате есть строки с b = 123?

.....
stax


Ну да. Это-то и удивляет
...
Рейтинг: 0 / 0
26.05.2021, 18:24
    #40073258
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MINUS странное поведение
Maxifly
SQL*Plus,
не смогу результат показать. Это у заказчика на площадке.
Что мне хоть искать? Расхождения в структуре таблиц и количество записей, которые MINUS посчитал за различные?

проделайте "у заказчика на площадке"

Проверьте структуру таблиц.
...
Рейтинг: 0 / 0
26.05.2021, 18:33
    #40073261
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MINUS странное поведение
[quot Maxifly#22327616]
Stax
пропущено...


Ну да. Это-то и удивляет

сморите на пробелы / округления

аля xx8 и xx7.9999999999999999999999999999

select dump(a) da,dump(b) db,dump(c) dc,dump(d) dd,a,b,c,d from tab1
minus
select dump(a) da,dump(b) db,dump(c) dc,dump(d) dd,a,b,c,d from tab2

зы
у меня такое бывало

.....
stax
...
Рейтинг: 0 / 0
26.05.2021, 18:38
    #40073264
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MINUS странное поведение
"Глаза" - это ненадёжный способ сравнения.

См. пример:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
SQL> CREATE TABLE t_char(c CHAR(10));
Table T_CHAR created.

SQL> CREATE TABLE t_vc2(vc2 VARCHAR2(10));
Table T_VC2 created.

SQL> DESCRIBE t_char;
Name Null? Type     
---- ----- -------- 
C         CHAR(10) 

SQL> DESCRIBE t_vc2;
Name Null? Type         
---- ----- ------------ 
VC2        VARCHAR2(10) 

SQL> INSERT INTO t_char(c) VALUES('test');
1 row inserted.

SQL> INSERT INTO t_vc2(vc2) VALUES('test');
1 row inserted.

SQL> COMMIT;
Commit complete.

SQL> SELECT c FROM t_char
  2  MINUS
  3  SELECT vc2 FROM t_vc2;

C         
----------
test      

SQL> SELECT '"' || c || '"' as c FROM t_char;

C           
------------
"test      "

SQL> SELECT '"' || vc2 || '"' as vc2 FROM t_vc2;

VC2         
------------
"test"
...
Рейтинг: 0 / 0
26.05.2021, 18:46
    #40073270
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MINUS странное поведение
SQL*Plus,

Структура одинаковая.

Там ситуация чуть сложнее, на самом деле выглядит, чем я тут описал.
Данные из одной таблички перенесены по db_link-у на вторую БД и я их на месте сравниваю. Я уже на этой БД где сравниваю даже сделал копию копии и сравниваю уже их. И даже отсортировал данные при создании "копии копии" и сравниваю уже только одно поле с PK и MINUS все равно расхождение показывает

PS: про Ваш пример с "глазами" знаю. Такого точно нет. Все текстовые поля varchar2
...
Рейтинг: 0 / 0
26.05.2021, 19:18
    #40073277
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MINUS странное поведение
Maxifly
SQL*Plus,

Структура одинаковая.

Там ситуация чуть сложнее, на самом деле выглядит, чем я тут описал.
Данные из одной таблички перенесены по db_link-у на вторую БД и я их на месте сравниваю. Я уже на этой БД где сравниваю даже сделал копию копии и сравниваю уже их. И даже отсортировал данные при создании "копии копии" и сравниваю уже только одно поле с PK и MINUS все равно расхождение показывает

PS: про Ваш пример с "глазами" знаю. Такого точно нет. Все текстовые поля varchar2

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

Сделайте то, что вам уже написали.

Пока больше обсуждать нечего.
...
Рейтинг: 0 / 0
27.05.2021, 11:15
    #40073455
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MINUS странное поведение
Maxifly
сравниваю уже только одно поле с PK и MINUS все равно расхождение показывает

У wrong results бывают разные причины.
Но для начала попробуйте перестроить индексы на обеих сторонах.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / MINUS странное поведение / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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