Гость
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Найти строки в одной таблице, отсутствующие в другой ASE / 9 сообщений из 9, страница 1 из 1
01.02.2013, 17:47
    #38134161
JenyaD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти строки в одной таблице, отсутствующие в другой ASE
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
01.02.2013, 21:27
    #38134383
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти строки в одной таблице, отсутствующие в другой ASE
JenyaD,

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

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

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

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

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

Ну, я тоже не пишу, но на самом деле не по этой причине.
...
Рейтинг: 0 / 0
04.02.2013, 11:47
    #38135901
JenyaD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти строки в одной таблице, отсутствующие в другой ASE
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
04.02.2013, 12:01
    #38135943
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти строки в одной таблице, отсутствующие в другой ASE
JenyaD,

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

Ты собственно что хочешь? Уже ю все ясно должно быть.
...
Рейтинг: 0 / 0
04.02.2013, 12:46
    #38136083
JenyaD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти строки в одной таблице, отсутствующие в другой ASE
Та ясно, что нужно использовать left join или exists. В моём случае лучше left join т.к. я не только на null проверяю в оригинальном запросе, а типа такого isnull(status, 99) in (1, 2, 99). Просто всегда хочу понять суть, так мне легче понять тот или иной момент.
...
Рейтинг: 0 / 0
04.02.2013, 23:21
    #38137163
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти строки в одной таблице, отсутствующие в другой ASE
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
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Найти строки в одной таблице, отсутствующие в другой ASE / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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