Like entre dos tablas para update

01/09/2006 - 22:38 por Carlos Alberto Quiroz. | Informe spam
Buen día tengo una duda interesante en sql, mira lo que pasa es que tengo dos
tablas la primera tiene dos campos Identificacion y tipo, la segunda tiene
dos campos que son texto y tipo de esta manera.


Tabla 1
Identificacion tipo
sa Empresa
cr Dirección
Macromedia Empresa
Limitada Empresa

Tabla 2
Texto tipo
Macromedia
avenida 20 cr 90
RMA Limitada

Como puedes ver los campos de la primera tabla esta llenos todos pero el
campo tipo de la tabla 2 no esta lleno.

la idea es actualizar el campo tipo de la tabla 2 con el valor empresa,
dirección u otra si existe según el campo texto de la tabla 2, osea.

macromedia existe en la tabla 1 y es de tipo empresa
avenida 20 cr 90 existe en la tabla 1 y es de tipo dirección ya que cr
existe en la tabla 1

ojo no se puede confundir cr con empresa ya que cr es una palabra completay
macromedia tiene parte adelante y parte atras.

pero macromedia no es de tipo dirección ya que se puede confundir con el cr
que tiene dentro de la misma palabra.

de todas maneras la tabla 2 debe quedar de la siguiente manera despues del
update

Macromedia empresa
avenida 20 cr 90 direccion
RMA Limitada empresa

He intentado hacer el update con el operador like pero me ha sido dificil
porque like solo aceptas valores de tipo texto y no me acepta campo.
otro de los puntos es que en la tabla 2 existe la palabra macromedia, y esta
se puede confundir con el tipo cr de la tabla 1 o el tipo macromedia.

Si puedes ayudarme estaria muy agradecido...

Que tengas un buen día.
 

Leer las respuestas

#1 Alejandro Mesa
02/09/2006 - 02:04 | Informe spam
Carlos,

No se que practica seria la idea, pero aqui va. Si en la tabla que vamos a
buscar sustituimos los espacios por otro caracter y encerramos el campo entre
entre dos instancias de ese caracter, algo asi como:

|avenida|20|cr|90|

entonces vamos a buscar el valor de la columna [Identificacion] de la tabla
[tabla1], encerrado entre dos instancias del caracter escojido. Algo asi como:

...
where '|' + replace(t2.texto, ' ', '|') + '|' like '%|' +
ltrim(rtrim(Identificacion)) + '|%'
go

Ejemplo:

create table dbo.t1 (
Identificacion varchar(25),
tipo varchar(25)
)
go

insert into dbo.t1 values('sa', 'Empresa')
insert into dbo.t1 values('cr', 'Dirección')
insert into dbo.t1 values('Macromedia', 'Empresa')
insert into dbo.t1 values('Limitada', 'Empresa')
go

create table dbo.t2 (
texto varchar(50),
tipo varchar(25)
)
go

insert into dbo.t2 (texto) values('Macromedia')
insert into dbo.t2 (texto) values('avenida 20 cr 90')
insert into dbo.t2 (texto) values('RMA Limitada')
go

update a
set a.tipo = b.tipo
from dbo.t2 as a
inner join dbo.t1 as b
on '|' + replace(a.texto, ' ', '|') + '|' like '%|' +
ltrim(rtrim(b.Identificacion)) + '|%'
go

select * from dbo.t1
select * from dbo.t2
go

drop table dbo.t1, dbo.t2
go"

Resultado:

Identificacion tipo
sa Empresa
cr Dirección
Macromedia Empresa
Limitada Empresa


texto tipo
Macromedia Empresa
avenida 20 cr 90 Dirección
RMA Limitada Empresa


AMB



"Carlos Alberto Quiroz." wrote:

Buen día tengo una duda interesante en sql, mira lo que pasa es que tengo dos
tablas la primera tiene dos campos Identificacion y tipo, la segunda tiene
dos campos que son texto y tipo de esta manera.


Tabla 1
Identificacion tipo
sa Empresa
cr Dirección
Macromedia Empresa
Limitada Empresa

Tabla 2
Texto tipo
Macromedia
avenida 20 cr 90
RMA Limitada

Como puedes ver los campos de la primera tabla esta llenos todos pero el
campo tipo de la tabla 2 no esta lleno.

la idea es actualizar el campo tipo de la tabla 2 con el valor empresa,
dirección u otra si existe según el campo texto de la tabla 2, osea.

macromedia existe en la tabla 1 y es de tipo empresa
avenida 20 cr 90 existe en la tabla 1 y es de tipo dirección ya que cr
existe en la tabla 1

ojo no se puede confundir cr con empresa ya que cr es una palabra completay
macromedia tiene parte adelante y parte atras.

pero macromedia no es de tipo dirección ya que se puede confundir con el cr
que tiene dentro de la misma palabra.

de todas maneras la tabla 2 debe quedar de la siguiente manera despues del
update

Macromedia empresa
avenida 20 cr 90 direccion
RMA Limitada empresa

He intentado hacer el update con el operador like pero me ha sido dificil
porque like solo aceptas valores de tipo texto y no me acepta campo.
otro de los puntos es que en la tabla 2 existe la palabra macromedia, y esta
se puede confundir con el tipo cr de la tabla 1 o el tipo macromedia.

Si puedes ayudarme estaria muy agradecido...

Que tengas un buen día.

Preguntas similares