2012-01-04 14 views
6

Tengo una tabla que tiene min y max columnas. Quiero buscar filas donde haya un conjunto de números entre este rango de min y max.¿Cómo se filtra el conjunto de números entre 2 columnas?

Ejemplo: Tengo un conjunto (3, 4, 11, 18).

  1. Mi filtrado consulta podría buscar:

    (3 between min and max) OR 
    (4 between min and max) OR 
    (11 between min and max) OR 
    (18 between min and max) 
    
  2. pero quería saber si hay una manera mejor algo como:

    (3,4,11,12) between min and max 
    

    que hará similar al # 1

Necesito thi s porque el conjunto puede cambiar entre diferentes búsquedas. Cualquier ayuda o sugerencia es apreciada.

La tabla en contexto más simple es class (classid, classname, minage, maxage). Hay miles de clases, así que obtengo solicitudes web para buscar clases con un conjunto específico de edades, por ejemplo (3,4,11,12) donde un usuario busca clases para las edades de 3, 4, 11 y 12.

Actualmente mi consulta se ve: seleccione * de la clase donde ((3 entre min y max) O (4 entre min y max) O (11 entre min y max) O (18 entre min y max))

+0

¿Podría insertar su conjunto de números en una tabla temporal y unirlos a su tabla de rangos, con una cláusula where apropiada? –

+1

¿Podría publicar la estructura de la tabla y ejemplos de lo que quiere exactamente? – Benoit

+1

El RWTF está nombrando columnas 'min' y' max'. Esto confundirá solo a los lectores sanos. Agregue la definición de su tabla y un fragmento de datos para ilustrar lo que pretende hacer. – wildplasser

Respuesta

0

We podría ayudarlo más si pudiera agregar más información publicando el esquema de su tabla. Sin embargo, esta consulta de muestra podría darle alguna pista. Consulta

muestra:

SELECT SampleValue, ColB, ColC FROM TableName WHERE SampleValue in (1,2,3)

+0

Tengo edité mi publicación para dar una muestra de mi tabla. ¿Cuál es el valor de muestra aquí? – chan

2

Algo así como

SELECT * 
    FROM MyTable AS T 
WHERE EXISTS (
       SELECT * 
       FROM MySet AS S 
       WHERE S.val BETWEEN T.my_min AND T.my_max 
      ); 
+0

gracias por la respuesta y esto se ve bien, pero ¿cómo puedo formar MySet? ¿Se puede hacer como parte de la consulta? – chan

0

Otra forma sería crear primero una tabla (una vez) y llenarlo con todas las edades posibles (de 1 a 101) :

CREATE TABLE Age 
(allowed TINYINT 
, PRIMARY KEY (allowed) 
) ; 

INSERT INTO Age 
    VALUES 
    (1), (2), (3), ... (101) ; 

El uso esto en su consulta de búsqueda:

SELECT * 
FROM Class 
WHERE EXISTS 
     (SELECT * 
     FROM Age 
     WHERE Age.allowed BETWEEN Class.minage AND Class.maxage 
      AND Age.allowed IN (3, 4, 11, 18) 
    ) 
+0

No, no puedo crear una tabla a menos que se pueda hacer dentro de una consulta. – chan

Cuestiones relacionadas