SubSelect incorrecta

20/12/2007 - 14:05 por José Luis Capel - Aicom | Informe spam
Hola,

En los ejemplos que os dejo más abajo estoy haciendo este select:

select * from condiciones XX where XX.tipo = 'C' AND xx.codigo IN (SELECT
cliente_alternativo FROM clientes WHERE cliente = xx.codigo)

El cual me devuelve esta información

Tipo Codigo Condicion especial

C 100 CLI 100
C 101 CLI 101

¿No debería haber salido tres filas dado que condiciones tiene tres filas
que cumplen la condición?

Saludos y gracias.

SqlServer 2000 SP4

DDL:

CREATE TABLE [dbo].[condiciones](

[tipo] [char](1) COLLATE Modern_Spanish_CI_AS NOT NULL,

[codigo] [char](10) COLLATE Modern_Spanish_CI_AS NOT NULL,

[condicion_especial] [char](10) COLLATE Modern_Spanish_CI_AS NOT NULL

) ON [PRIMARY]

CREATE TABLE [dbo].[clientes](

[cliente] [char](10) COLLATE Modern_Spanish_CI_AS NOT NULL,

[cliente_alternativo] [char](10) COLLATE Modern_Spanish_CI_AS NOT NULL

) ON [PRIMARY]



DML:

INSERT INTO [clientes] ([cliente],[cliente_alternativo]) VALUES
('100','100')

INSERT INTO [clientes] ([cliente],[cliente_alternativo]) VALUES
('101','101')

INSERT INTO [clientes] ([cliente],[cliente_alternativo]) VALUES
('200','100')

INSERT INTO [clientes] ([cliente],[cliente_alternativo]) VALUES
('201','101')

INSERT INTO [clientes] ([cliente],[cliente_alternativo]) VALUES
('202','202')

INSERT INTO [condiciones] ([tipo],[codigo],[condicion_especial]) VALUES
('C','100','CLI 100')

INSERT INTO [condiciones] ([tipo],[codigo],[condicion_especial]) VALUES
('C','101','CLI 101')

INSERT INTO [condiciones] ([tipo],[codigo],[condicion_especial]) VALUES
('A','AAA','ART AAA')

INSERT INTO [condiciones] ([tipo],[codigo],[condicion_especial]) VALUES
('A','AAB','ART AAB')

INSERT INTO [condiciones] ([tipo],[codigo],[condicion_especial]) VALUES
('C','201','CLI 201')

Preguntas similare

Leer las respuestas

#1 Maxi
20/12/2007 - 14:28 | Informe spam
Hola, yo no veo que haya 3 coincidencias, mire la primer condicion donde
usted indica que el tipo debe ser igual a C, ahi obtiene como resultado los
siguientes codigos:

100
101
201

de estos codigos en la segunda seleccion solamente estan el 100 y 101 y
aparece un 202 tambien!


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"José Luis Capel - Aicom" escribió en el mensaje
news:
Hola,

En los ejemplos que os dejo más abajo estoy haciendo este select:

select * from condiciones XX where XX.tipo = 'C' AND xx.codigo IN (SELECT
cliente_alternativo FROM clientes WHERE cliente = xx.codigo)

El cual me devuelve esta información

Tipo Codigo Condicion especial

C 100 CLI 100
C 101 CLI 101

¿No debería haber salido tres filas dado que condiciones tiene tres filas
que cumplen la condición?

Saludos y gracias.

SqlServer 2000 SP4

DDL:

CREATE TABLE [dbo].[condiciones](

[tipo] [char](1) COLLATE Modern_Spanish_CI_AS NOT NULL,

[codigo] [char](10) COLLATE Modern_Spanish_CI_AS NOT NULL,

[condicion_especial] [char](10) COLLATE Modern_Spanish_CI_AS NOT NULL

) ON [PRIMARY]

CREATE TABLE [dbo].[clientes](

[cliente] [char](10) COLLATE Modern_Spanish_CI_AS NOT NULL,

[cliente_alternativo] [char](10) COLLATE Modern_Spanish_CI_AS NOT NULL

) ON [PRIMARY]



DML:

INSERT INTO [clientes] ([cliente],[cliente_alternativo]) VALUES
('100','100')

INSERT INTO [clientes] ([cliente],[cliente_alternativo]) VALUES
('101','101')

INSERT INTO [clientes] ([cliente],[cliente_alternativo]) VALUES
('200','100')

INSERT INTO [clientes] ([cliente],[cliente_alternativo]) VALUES
('201','101')

INSERT INTO [clientes] ([cliente],[cliente_alternativo]) VALUES
('202','202')

INSERT INTO [condiciones] ([tipo],[codigo],[condicion_especial]) VALUES
('C','100','CLI 100')

INSERT INTO [condiciones] ([tipo],[codigo],[condicion_especial]) VALUES
('C','101','CLI 101')

INSERT INTO [condiciones] ([tipo],[codigo],[condicion_especial]) VALUES
('A','AAA','ART AAA')

INSERT INTO [condiciones] ([tipo],[codigo],[condicion_especial]) VALUES
('A','AAB','ART AAB')

INSERT INTO [condiciones] ([tipo],[codigo],[condicion_especial]) VALUES
('C','201','CLI 201')




Respuesta Responder a este mensaje
#2 José Luis Capel - Aicom
20/12/2007 - 16:09 | Informe spam
Maxi,

Gracias. Había confundido conceptos.

Una última pregunta.

¿Habría alguna forma de añadir, es ese select, una columna con el código de
cliente de la tabla 'clientes'? Osea, obtener un resultado como este:

Tipo Codigo Condicion especial Cliente
C 100 CLI 100 100
C 101 CLI 101 101

Es decir, como en el where se indica
xx.codigo IN (SELECT cliente_alternativo FROM clientes WHERE cliente =
xx.codigo)

entonces me interesaría tener tambien clientes.codigo como parte del
resultado.

¿Es posible?

Saludos y gracias,
José Luis Capel



"Maxi" escribió en el mensaje
news:%
Hola, yo no veo que haya 3 coincidencias, mire la primer condicion donde
usted indica que el tipo debe ser igual a C, ahi obtiene como resultado
los siguientes codigos:

100
101
201

de estos codigos en la segunda seleccion solamente estan el 100 y 101 y
aparece un 202 tambien!


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"José Luis Capel - Aicom" escribió en el mensaje
news:
Hola,

En los ejemplos que os dejo más abajo estoy haciendo este select:

select * from condiciones XX where XX.tipo = 'C' AND xx.codigo IN (SELECT
cliente_alternativo FROM clientes WHERE cliente = xx.codigo)

El cual me devuelve esta información

Tipo Codigo Condicion especial

C 100 CLI 100
C 101 CLI 101

¿No debería haber salido tres filas dado que condiciones tiene tres filas
que cumplen la condición?

Saludos y gracias.

SqlServer 2000 SP4

DDL:

CREATE TABLE [dbo].[condiciones](

[tipo] [char](1) COLLATE Modern_Spanish_CI_AS NOT NULL,

[codigo] [char](10) COLLATE Modern_Spanish_CI_AS NOT NULL,

[condicion_especial] [char](10) COLLATE Modern_Spanish_CI_AS NOT NULL

) ON [PRIMARY]

CREATE TABLE [dbo].[clientes](

[cliente] [char](10) COLLATE Modern_Spanish_CI_AS NOT NULL,

[cliente_alternativo] [char](10) COLLATE Modern_Spanish_CI_AS NOT NULL

) ON [PRIMARY]



DML:

INSERT INTO [clientes] ([cliente],[cliente_alternativo]) VALUES
('100','100')

INSERT INTO [clientes] ([cliente],[cliente_alternativo]) VALUES
('101','101')

INSERT INTO [clientes] ([cliente],[cliente_alternativo]) VALUES
('200','100')

INSERT INTO [clientes] ([cliente],[cliente_alternativo]) VALUES
('201','101')

INSERT INTO [clientes] ([cliente],[cliente_alternativo]) VALUES
('202','202')

INSERT INTO [condiciones] ([tipo],[codigo],[condicion_especial]) VALUES
('C','100','CLI 100')

INSERT INTO [condiciones] ([tipo],[codigo],[condicion_especial]) VALUES
('C','101','CLI 101')

INSERT INTO [condiciones] ([tipo],[codigo],[condicion_especial]) VALUES
('A','AAA','ART AAA')

INSERT INTO [condiciones] ([tipo],[codigo],[condicion_especial]) VALUES
('A','AAB','ART AAB')

INSERT INTO [condiciones] ([tipo],[codigo],[condicion_especial]) VALUES
('C','201','CLI 201')








Respuesta Responder a este mensaje
#3 Carlos M. Calvelo
20/12/2007 - 22:16 | Informe spam
Hola José Luis,

On 20 dec, 16:09, "José Luis Capel - Aicom"
wrote:
Maxi,

Gracias. Había confundido conceptos.

Una última pregunta.

¿Habría alguna forma de añadir, es ese select, una columna con el código de
cliente de la tabla 'clientes'? Osea, obtener un resultado como este:

Tipo Codigo Condicion especial Cliente
C 100 CLI 100 100
C 101 CLI 101 101

Es decir, como en el where se indica
xx.codigo IN (SELECT cliente_alternativo FROM clientes WHERE cliente > xx.codigo)

entonces me interesaría tener tambien clientes.codigo como parte del
resultado.

¿Es posible?




Mira el resultado de este select:

select *
from condiciones co inner join clientes cl
on co.codigo = cl.cliente

Si quieres todos los registros de la tabla condiciones,
aunque no tengan un cliente que corresponda a la
columna codigo, pon un 'left join' en vez de un 'inner join'.

Saludos,
Carlos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida