SQL、SQLite从3个表中选择

SQL、SQLite从3个表中选择,sql,sqlite,Sql,Sqlite,表1从0到99的Num1参考表 表2有日期,结果有许多按日期和结果唯一的记录 表3给出了结果Num1、Num2、Num3 我想通过表3中的结果加入表2 并将表1中的Num1与表3中的Num1或Num2或Num3中的一个进行匹配 其中日期小于某个日期 按表1分组 因此只返回100行 如果找到匹配的100,如何让它停止一次。它似乎每次都完全扫描表2。当我接近桌子的末尾时,选择速度会更快表面上看,这可能就是你想要的: SELECT Num1 AS Num FROM Table2 WHERE Date

表1从0到99的Num1参考表

表2有日期,结果有许多按日期和结果唯一的记录

表3给出了结果Num1、Num2、Num3

我想通过表3中的结果加入表2 并将表1中的Num1与表3中的Num1或Num2或Num3中的一个进行匹配 其中日期小于某个日期 按表1分组 因此只返回100行


如果找到匹配的100,如何让它停止一次。它似乎每次都完全扫描表2。当我接近桌子的末尾时,选择速度会更快

表面上看,这可能就是你想要的:

SELECT Num1 AS Num FROM Table2 WHERE Date < '2011-04-12'
UNION
SELECT Num2 AS Num FROM Table2 WHERE Date < '2011-04-12'
UNION
SELECT Num3 AS Num FROM Table2 WHERE Date < '2011-04-12'
这将从表2中的Num1、Num2和Num3中选择唯一值

不清楚为什么需要表1;但是,可以将此结果与表1中的值合并,以确保所选值显示在表1中

不清楚标题中提到的第三个表在哪里,它包含什么,或者如何连接


如我所料,如果这遗漏了问题的要点,则需要仔细澄清希望看到的内容。

要限制SELECT查询返回的记录数,可以使用该子句

我试图提取一个查询,以满足我对您的查询的理解。但由于你的解释有点含糊不清,我可能不太明白你想要什么:

  SELECT Table3.Num1
  ,      Table3.Num2
  ,      Table3.Num3
    FROM Table3
         INNER JOIN Table2
                 ON Table3.Result = Table2.Result
         INNER JOIN Table1
                 ON Table1.Num1 IN (Table3.Num1, Table3.Num2, Table3.Num3)
   WHERE Table2.Date < '2011-04-13'
ORDER BY Table2.Date
   LIMIT 100 -- this will make sure only the first 100 records are returned
  ;

<>如果这样做了你想要的,那么你应该考虑重新设计你的表。必须将表1与表3的所有三个进行比较。Num1、Num2和Num3看起来非常奇怪,更重要的是,对我来说效率非常低。

标题中引用的第三个表是哪一个?表1中列的名称是什么?你到底想看什么?优化器如何扫描表主要是优化器的一个问题。你有适当的索引吗?