2011-04-13 55 views
0

表1 NUM1(参考表来回0〜99)SQL,SQLite的选择从3个表

表2具有日期,结果(具有由日期和结果独特多条记录)

表3具有结果, NUM1,NUM2,NUM3

我谨结果如表3 加入表2和匹配各表1 NUM1到NUM1或NUM2或者NUM3的一个表3 其中的日期为<一些日期 按表1 分组,因此只返回100行。

如何找到匹配的100来停止一次。它似乎完全扫描表2每次。当我拿到附近的表的末尾选择去更快

+0

这是标题中引用的第三个表格吗? Table1中列的名称是什么?你究竟想要看什么?优化器如何扫描一个表对于优化器来说大多是一个问题。你有适当的索引吗? – 2011-04-13 03:38:30

回答

0

从表面上看,这可能是你所追求的:

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' 

这将选择从NUM1,NUM2和NUM3表2中的独特价值。

不清楚为什么你需要Table1;但是,可以将此结果与Table1中的值结合起来,以确保所选值出现在表1中。

目前尚不清楚标题中提及的第三张表的含义,包含的内容或可能如何加入。

如我所料,如果没有提到问题的重点,您需要仔细澄清您希望看到的内容。

0

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

我试图提炼出一个满足你的查询所能理解的查询。但你的解释是有点神秘,很可能是我不太明白你想要什么:

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 
    ; 

如果确实做你想要什么,那么你或许应该考虑重新设计表格。必须将Table1与Table3.Num1,Num2和Num3中的所有三个进行比较看起来很奇怪,更重要的是,对我来说效率非常低。