Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 right join улучшить  [new]
right join
Guest
как сие можно сделать без full outer join ?
declare @a table (n varchar(10),t varchar(10))
declare @b table (n varchar(10),t varchar(10))

insert into @a select 'a','t1,t2,t3' 
	 union all select 'a','t4,t5'
	 union all select 'a','t7,t8'
	 union all select 'f','t1,t2,t3' 
	 union all select 'f','t7,t8'

insert into @b select 'a','t1'
	 union all select 'a','t4'
	 union all select 'a','t7'
	 union all select 'a','t9'  
	 union all select 'b','t2'  
	 union all select 'b','t7'  
	 union all select 'f','t3'  
	 union all select 'f','t8'  

select aa.n,a.*,b.*
from @a a 
	right join @b b 
	on a.[n]=b.[n] 
		and a.[t] like '%' + b.[t] + '%'
    full outer join (select n from @a group by n) aa on aa.[n]=b.n
where aa.n=b.n and a.n is null

nntnt
aNULLNULLat9

т.е. нужно получить все строки из таблицы @b где поля n совпадает с таблицей @a но в таблице @b есть строки которых нет в таблице @a
20 июл 11, 15:54    [11001174]     Ответить | Цитировать Сообщить модератору
 Re: right join улучшить  [new]
yado4eg
Member

Откуда:
Сообщений: 202
right join
в таблице @b есть строки которых нет в таблице @a


все записи таблицы @b

или 'a','t4' = 'a','t4,t5' ? задача непонятна
20 июл 11, 16:16    [11001346]     Ответить | Цитировать Сообщить модератору
 Re: right join улучшить  [new]
right join
Guest
yado4eg
right join
в таблице @b есть строки которых нет в таблице @a


все записи таблицы @b

или 'a','t4' = 'a','t4,t5' ? задача непонятна

a.[t] like '%' + b.[t] + '%'
20 июл 11, 16:19    [11001377]     Ответить | Цитировать Сообщить модератору
 Re: right join улучшить  [new]
Glory
Member

Откуда:
Сообщений: 104751
right join
или 'a','t4' = 'a','t4,t5' ? задача непонятна

a.[t] like '%' + b.[t] + '%'
[/quote]
Это условие разве "из таблицы @b где поля n совпадает с таблицей @a" ?
20 июл 11, 16:25    [11001430]     Ответить | Цитировать Сообщить модератору
 Re: right join улучшить  [new]
right join
Guest
Glory
right join
или 'a','t4' = 'a','t4,t5' ? задача непонятна

a.[t] like '%' + b.[t] + '%'

Это условие разве "из таблицы @b где поля n совпадает с таблицей @a" ?

а это так важно?

главный вопрос был как можно сделать без full outer join. А остальное это лишь пояснение..

автор
т.е. нужно получить все строки из таблицы @b где поля n совпадает с таблицей @a но в таблице @b есть строки которых нет в таблице @a

а как вы бы нашли выделенное без уточняющих условий?
20 июл 11, 16:30    [11001462]     Ответить | Цитировать Сообщить модератору
 Re: right join улучшить  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
right join
главный вопрос был как можно сделать без full outer join.
Главный вопрос: "Сделать что?"
20 июл 11, 16:32    [11001479]     Ответить | Цитировать Сообщить модератору
 Re: right join улучшить  [new]
Glory
Member

Откуда:
Сообщений: 104751
right join
Glory
пропущено...

a.[t] like '%' + b.[t] + '%'

Это условие разве "из таблицы @b где поля n совпадает с таблицей @a" ?

а это так важно?

главный вопрос был как можно сделать без full outer join. А остальное это лишь пояснение..

Конечно не важно. Можно просто спросить - как мне сделать. И пусть каждый для себя сам решает что
20 июл 11, 16:42    [11001543]     Ответить | Цитировать Сообщить модератору
 Re: right join улучшить  [new]
right join
Guest
iap
right join
главный вопрос был как можно сделать без full outer join.
Главный вопрос: "Сделать что?"

да вы ребята умники. уже не столь важно.
но надо было получить
nntnt
aNULLNULLat9
20 июл 11, 16:42    [11001547]     Ответить | Цитировать Сообщить модератору
 Re: right join улучшить  [new]
yado4eg
Member

Откуда:
Сообщений: 202
right join,

select *
from #b b
where exists
      (select *
       from #a a
       where a.n = b.n  
      )
      and
      not exists
      (select *
       from #a a
       where charindex(b.t, a.t) > 0)

правда в один EXISTS чёта не получилось :(
20 июл 11, 16:49    [11001599]     Ответить | Цитировать Сообщить модератору
 Re: right join улучшить  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
?
select distinct b.n, b.t
from @b b
inner join @a a on a.n = b.n
where
	not exists (select 1 from @a a where a.n = b.n and charindex(b.t, a.t) <> 0)
20 июл 11, 17:42    [11002026]     Ответить | Цитировать Сообщить модератору
 Re: right join улучшить  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
Ну и такой вариант

select * from
(
	select n, col.value('.', 'varchar(50)') t
	from
	( --t
	select n, cast('<row>'+replace(ltrim(t), ',', '</row><row>')+ '</row>' as xml) x
	from @a 
	) t
	CROSS APPLY x.nodes('/row') as nTable(col)
)a right join @b b on a.n =b.n and b.t = a.t
where b.n in (select n from @a) and a.n is null
	 
20 июл 11, 17:50    [11002074]     Ответить | Цитировать Сообщить модератору
 Re: right join улучшить  [new]
yado4eg
Member

Откуда:
Сообщений: 202
HandKot,

ну у человека просто обида на джоины

select distinct b.n, b.t
from @b b
inner join @a a on a.n = b.n
where
	not exists (select 1 from @a a where [color=red]/*a.n = b.n and*/[/color] charindex(b.t, a.t) <> 0)
20 июл 11, 22:50    [11003340]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить