2009-12-17 9 views
12

Ich versuche CPU_TIME von der DB zu wählen, aber die Zeit mit einigen anderen Kriterien entsprechen - dh BUILD_VERSION, test_letter, design_index, multi_thread und test_indexSQLite Abfrage mit SELECT verschachtelt

Was ich dachte funktionieren würde, war (die innere SELECT DISTINCT Erklärung über ihre eigenen Werke):

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)}] 

*** Hinweis - diese mir ein „keine solche Spalte: CPU_TIME“ schenkt Fehler

, wo meine erste SELECT alle Elemente ziehen würde aus eine eindeutige Rückkehr. Dann wollte ich bei jeder Rückkehr NUR die cpu_time für jeden Typ von $ testletter verwenden.

Dies ist zur Erzeugung von CSV-Dateien, die nur die CPU_TIME haben. Ist es offensichtlich, was ich falsch mache?

Vielen Dank!

+0

versuchen, die Code-Taste (Einsen und Nullen) im Editor oder indent Code von 4 Leerzeichen zu verwenden, um es zu bekommen blicken. –

Antwort

24

Sie sollten immer WHERE xxx IN (SELECT xxx FROM ...) verwenden, anstatt mehrere Elemente in der Innen wählen auszuwählen. Sie können aber zum Beispiel der in den äußeren wählen hinzuzufügen:

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

Die Anweisung "sollte immer WHERE xxx IN verwenden" ist ein bisschen stark und nicht gerechtfertigt. Es gibt Fälle, in denen geschachtelte Auswahlen andere Formen annehmen sollten (Unterabfragen können auch in den SELECT- und FROM-Abschnitten der Abfrage enthalten sein), die am besten im folgenden SQLite-Lernprogramm beschrieben werden: https://www.techonthenet.com/sqlite/subqueries.php –