2009-12-17 27 views
12

Estoy intentando seleccionar cpu_time de la db, pero el tiempo debe corresponder con algunos otros criterios - es decir build_version, test_letter, design_index, multi_thread y test_indexSQLite consulta utilizando SELECT anidado

Lo que pensé que iba a funcionar era (el interior SELECT DISTINCT comunicado trabaja por su cuenta):

set query [db eval \ 
    {SELECT DISTINCT cpu_time WHERE cpu_time IN 
      (SELECT DISTINCT mgc_version, test_type_letter, design_index, 
          test_index, cpu_time, multi_thread 
        FROM TestExecutions WHERE test_type_letter 
        BETWEEN $testletter AND $testletter)}] 

*** Nota - esto me está dando un "tal columna: cpu_time" error

donde mi primera SELECT se retiraría todos los artículos un retorno distinto. Luego, a partir de cada devolución, SOLO QUISO utilizar el cpu_time, para cada tipo de $ testletter.

Esto es para generar archivos CSV que solo tienen el cpu_time. ¿Es obvio lo que me estoy equivocando?

¡Gracias!

+0

intenta utilizar el botón de código (unos y ceros) en el editor, o código guión por 4 espacios para conseguirlo mirando a la derecha. –

Respuesta

24

Siempre debe usar WHERE xxx IN (SELECT xxx FROM ...), en lugar de seleccionar varios elementos en la selección interna. Puede añadir los del exterior seleccione embargo, por ejemplo:

SELECT DISTINCT 
    mgc_version, 
    test_type_letter, 
    design_index, 
    test_index, 
    cpu_time, 
    multi_thread 
FROM TestExecutions 
WHERE cpu_time IN 
(
    SELECT DISTINCT cpu_time 
    FROM TestExecutions 
    WHERE test_type_letter BETWEEN $testletter AND $testletter 
) 
+2

La declaración "siempre debe usar WHERE xxx IN" es un poco fuerte y no está justificada. Hay casos en que las selecciones anidadas deben tomar otras formas (la subconsulta también puede residir en SELECT y FROM partes de la consulta), que se describen mejor en el siguiente tutorial de SQLite: https://www.techonthenet.com/sqlite/subqueries.php –

Cuestiones relacionadas