powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / MINUS странное поведение
13 сообщений из 13, страница 1 из 1
MINUS странное поведение
    #40073240
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

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

Я чего-то не понимаю, видимо.
...
Рейтинг: 0 / 0
MINUS странное поведение
    #40073250
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
MINUS странное поведение
    #40073251
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выполните в 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
MINUS странное поведение
    #40073253
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Maxifly
и получаю пустой результат.

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

ну так и должно быть
...
Рейтинг: 0 / 0
MINUS странное поведение
    #40073254
Maxifly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus,
не смогу результат показать. Это у заказчика на площадке.
Что мне хоть искать? Расхождения в структуре таблиц и количество записей, которые MINUS посчитал за различные?
...
Рейтинг: 0 / 0
MINUS странное поведение
    #40073255
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
MINUS странное поведение
    #40073257
Maxifly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Stax#22327608]
Maxifly
У меня как-то странно ведет себя оператор MINUS.

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

.....
stax


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

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

Проверьте структуру таблиц.
...
Рейтинг: 0 / 0
MINUS странное поведение
    #40073261
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[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
MINUS странное поведение
    #40073264
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Глаза" - это ненадёжный способ сравнения.

См. пример:
Код: 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
MINUS странное поведение
    #40073270
Maxifly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus,

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

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

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

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

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

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

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

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

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

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


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