powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Найти строки в одной таблице, отсутствующие в другой ASE
9 сообщений из 9, страница 1 из 1
Найти строки в одной таблице, отсутствующие в другой ASE
    #38134161
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Adaptive Server Enterprise/15.5/EBF 18655

Хочу найти строки с ID во 2-й таблице которых нету во 1-й таблице.
Без использования exists.

Код: sql
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.
create table #TBL1
(  
      ID      integer not null,   
      VAL     integer null
)  
go
delete #TBL1
go
   
insert into #TBL1(ID, VAL)
select 1, 2
union all
select 2, 3
union all
select 3, 3
union all
select 4, 5
go

create table #TBL2
(  
      ID      integer not null,   
      VAL     integer null
)  
go

delete #TBL2
go

insert into #TBL2(ID, VAL)
select 1, 2
union all
select 2, 3
go

select #TBL1.ID, #TBL2.ID 
from #TBL1, #TBL2
where #TBL1.ID *= #TBL2.ID and #TBL2.VAL  is null

select #TBL1.ID, #TBL2.ID 
from #TBL1 left join #TBL2 on (#TBL1.ID = #TBL2.ID)
where #TBL2.VAL is null 



В первом select выдает

ID ID
1 null
2 null
3 null
4 null


Во 2-м, что и требовалось.

ID ID
3 null
4 null

Вопрос, почему 1-й запрос не работает так как 2-й ?
...
Рейтинг: 0 / 0
Найти строки в одной таблице, отсутствующие в другой ASE
    #38134383
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JenyaD,

А почему это без использования EXISTS?
...
Рейтинг: 0 / 0
Найти строки в одной таблице, отсутствующие в другой ASE
    #38134389
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос, почему 1-й запрос не работает так как 2-й ?

Потому что семантика вычисления значений полей до и после JOIN определена для ANSI JOIN и не определена для T-SQL join.

Кстати, первый запрос мог бы и работать.
В смысле, иногда он работает, в зависимости от плана запроса.
...
Рейтинг: 0 / 0
Найти строки в одной таблице, отсутствующие в другой ASE
    #38134581
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВопрос, почему 1-й запрос не работает так как 2-й ?

Потому что семантика вычисления значений полей до и после JOIN определена для ANSI JOIN и не определена для T-SQL join.

... и вот по этой причине я никогда не пишу запросы в t-sql синтаксисе :)
...
Рейтинг: 0 / 0
Найти строки в одной таблице, отсутствующие в другой ASE
    #38134936
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Ну, я тоже не пишу, но на самом деле не по этой причине.
...
Рейтинг: 0 / 0
Найти строки в одной таблице, отсутствующие в другой ASE
    #38135901
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JenyaDХочу найти строки с ID во 2-й таблице которых нету во 1-й таблице.
Точнее. Хочу найти строки с ID в 1-й таблице которых нету во 2-й таблице.
Планы одинаковые :

1-й

aseisql
|ROOT:EMIT Operator (VA = 4)
|
| |RESTRICT Operator (VA = 3)(0)(0)(0)(0)(13)
| |
| | |NESTED LOOP JOIN Operator (VA = 2) (Join Type: Left Outer Join)
| | |
| | | |SCAN Operator (VA = 0)
| | | | FROM TABLE
| | | | #TBL1
| | | | Table Scan.
| | | | Forward Scan.
| | | | Positioning at start of table.
| | | | Using I/O Size 2 Kbytes for data pages.
| | | | With LRU Buffer Replacement Strategy for data pages.
| | |
| | | |SCAN Operator (VA = 1)
| | | | FROM TABLE
| | | | #TBL2
| | | | Table Scan.
| | | | Forward Scan.
| | | | Positioning at start of table.
| | | | Using I/O Size 2 Kbytes for data pages.
| | | | With LRU Buffer Replacement Strategy for data pages.

2-й
aseisql
|ROOT:EMIT Operator (VA = 4)
|
| |RESTRICT Operator (VA = 3)(0)(0)(0)(0)(13)
| |
| | |NESTED LOOP JOIN Operator (VA = 2) (Join Type: Left Outer Join)
| | |
| | | |SCAN Operator (VA = 0)
| | | | FROM TABLE
| | | | #TBL1
| | | | Table Scan.
| | | | Forward Scan.
| | | | Positioning at start of table.
| | | | Using I/O Size 2 Kbytes for data pages.
| | | | With LRU Buffer Replacement Strategy for data pages.
| | |
| | | |SCAN Operator (VA = 1)
| | | | FROM TABLE
| | | | #TBL2
| | | | Table Scan.
| | | | Forward Scan.
| | | | Positioning at start of table.
| | | | Using I/O Size 2 Kbytes for data pages.
| | | | With LRU Buffer Replacement Strategy for data pages.

Кстати 1-й запрос, если убрать условие проверки на null выполняется правильно. Выводит всё из первой таблицы и там где нет соответствий по ID null'ы.
...
Рейтинг: 0 / 0
Найти строки в одной таблице, отсутствующие в другой ASE
    #38135943
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JenyaD,

Он и если не убирать условие, тоже выполняется правильно...

Ты собственно что хочешь? Уже ю все ясно должно быть.
...
Рейтинг: 0 / 0
Найти строки в одной таблице, отсутствующие в другой ASE
    #38136083
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Та ясно, что нужно использовать left join или exists. В моём случае лучше left join т.к. я не только на null проверяю в оригинальном запросе, а типа такого isnull(status, 99) in (1, 2, 99). Просто всегда хочу понять суть, так мне легче понять тот или иной момент.
...
Рейтинг: 0 / 0
Найти строки в одной таблице, отсутствующие в другой ASE
    #38137163
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JenyaD,

http://infocenter.sybase.com/help/topic/com.sybase.dc37429_1250/html/whatsnew/CHDCHBCF.htm?resultof=%22%74%2d%73%71%6c%22%20%22%73%71%6c%22%20%22%6a%6f%69%6e%22%20 Sybase recommends that applications use ANSI outer joins because they unambiguously specify whether the on or where clause contains the predicate, which is ambiguous when you use Transact-SQL outer joins.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Найти строки в одной таблице, отсутствующие в другой ASE
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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