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')
 

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')




Preguntas similares