2009-12-17 35 views
12

Tôi đang cố gắng để chọn cpu_time từ db, nhưng thời điểm đó phải phù hợp với một số tiêu chí khác - tức là build_version, test_letter, design_index, multi_thread, và test_indexSQLite Query bằng cách sử dụng lồng CHỌN

Những gì tôi nghĩ sẽ làm việc là (các SELECT DISTINCT tuyên bố bên trong hoạt động trên riêng của mình):

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

*** Lưu ý - đây là đem lại cho tôi một "không có cột như: cpu_time" lỗi

nơi SELECT đầu tiên của tôi sẽ kéo tất cả các mục từ một sự trở lại khác biệt. Sau đó, từ mỗi lần trả lại, tôi muốn CHỈ sử dụng cpu_time, cho mỗi loại $ testletter.

Điều này là để tạo tệp CSV chỉ có cpu_time. Có rõ ràng những gì tôi nhận được sai?

Cảm ơn bạn!

+0

Hãy thử sử dụng nút mã (số và số không) trong trình chỉnh sửa hoặc mã thụt lề bằng 4 dấu cách để làm cho nó trông đúng. –

Trả lời

24

Bạn nên luôn sử dụng WHERE xxx IN (SELECT xxx FROM ...), thay vì chọn nhiều mục trong lựa chọn bên trong. Tuy nhiên, bạn có thể thêm những thứ đó vào bên ngoài chọn, ví dụ:

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

Câu lệnh "nên luôn luôn sử dụng WHERE xxx IN" hơi mạnh và không hợp lý. Có những trường hợp khi các lựa chọn lồng nhau nên có các dạng khác (truy vấn phụ cũng có thể nằm trong các phần SELECT và FROM của truy vấn), được mô tả rõ nhất theo hướng dẫn SQLite sau: https://www.techonthenet.com/sqlite/subqueries.php –

Các vấn đề liên quan