Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

uso del in en los select

Estas en el tema de uso del in en los select en el foro de Bases de Datos General en Foros del Web. El uso del in en los select tiene limitacion en la cantidad de elementos del conjunto. Es decir: select * from table1 where id in ...
  #1 (permalink)  
Antiguo 18/03/2005, 09:50
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 19 años, 8 meses
Puntos: 0
uso del in en los select

El uso del in en los select tiene limitacion en la cantidad de elementos del conjunto. Es decir:
select * from table1 where id in (2,3,4)
El conjunto que esta a la derecha no me permite que tenga mas de 23 elemento.
A que se debe? es posible solucionarlo?

Gracias
  #2 (permalink)  
Antiguo 18/03/2005, 11:25
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 8 meses
Puntos: 77
mm que raro yo he usado in con unos 50 elementos sin problemas...
  #3 (permalink)  
Antiguo 18/03/2005, 13:49
 
Fecha de Ingreso: julio-2001
Mensajes: 80
Antigüedad: 23 años, 4 meses
Puntos: 1
Que yo sepa no hay ningún límite, por lo menos en los gestores de bases de datos SQL con los que he trabajado (MySQL, SQL Server, Oracle...). ¿Has revisado bien la consulta por si se tratase de un error en la misma en lugar de una limitación del sistema?.

En cualquiera de los casos una consulta con una cláusula in de más de 23 elementos empieza a ser complicada de leer, así que te recomendaría que estudiases la posibilidad (según los requerimientos del problema que intentas solucionar) de usar una tabla temporal para insertar en ella los criterios de búsqueda y simplificar de esa manera la consulta que quieras hacer, me explico:

Código:
--Esta es la tabla donde quiero hacer la búsqueda
create table tabla (campo int)

--Esta es la tabla temporal en la que guardaré los criterios del "in"
create table #criterios_busqueda (campo int)
go

--Este bucle es para añadir datos de prueba
declare @i as int set  @i = 0
while (@i < 50)
begin
	set  @i = @i + 1
	--En la tabla "tabla" inserto los números del 1 al 50
	insert tabla (campo) values  (@i)

	--En la tabla "#criterios_busqueda" sólo inserto del 1 al 25
	if  (@i <= 25)
		insert #criterios_busqueda (campo) values  (@i)
end

--Le pido que me muestre de "tabla" sólo los que estén entre el 1 y el 25
select * from  tabla where  campo in
		(select  campo from  #criterios_busqueda)

--Esta parte del script elimina las tablas del ejemplo
drop table tabla
drop table #criterios_busqueda
__________________
Carlos Capote Pérez-Andreu
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:27.