【问题标题】:SQLite Query using nested SELECT使用嵌套 SELECT 的 SQLite 查询
【发布时间】:2017-06-23 18:22:50
【问题描述】:

我正在尝试从数据库中选择 cpu_time,但时间必须与其他一些标准相对应 - 即 build_version、test_letter、design_index、multi_thread 和 test_index

我认为可行的是(内部的SELECT DISTINCT 语句独立工作):

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

***注意 - 这给了我一个“没有这样的列:cpu_time”错误

我的第一个 SELECT 将从不同的返回中提取所有项目。然后,从每次返回中,我只想对每种类型的 $testletter 使用 cpu_time。

这用于生成只有 cpu_time 的 CSV 文件。我做错了什么很明显吗?

谢谢!

【问题讨论】:

  • 尝试使用编辑器中的代码按钮(一和零),或将代码缩进 4 个空格以使其看起来正确。

标签: sqlite


【解决方案1】:

您应该始终使用WHERE xxx IN (SELECT xxx FROM ...),而不是在内部选择中选择多个项目。您可以在外部选择中添加它们,例如:

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
)

【讨论】:

  • “应始终使用 WHERE xxx IN”声明有点强硬,不合理。在某些情况下,嵌套选择应该采用其他形式(子查询也可以驻留在查询的 SELECT 和 FROM 部分中),以下 SQLite 教程对此进行了最佳描述:techonthenet.com/sqlite/subqueries.php
猜你喜欢
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 2015-08-05
  • 2017-08-29
  • 2012-09-13
  • 1970-01-01
相关资源
最近更新 更多