表1 NUM1(参考表来回0〜99)SQL,SQLite的选择从3个表
表2具有日期,结果(具有由日期和结果独特多条记录)
表3具有结果, NUM1,NUM2,NUM3
我谨结果如表3 加入表2和匹配各表1 NUM1到NUM1或NUM2或者NUM3的一个表3 其中的日期为<一些日期 按表1 分组,因此只返回100行。
如何找到匹配的100来停止一次。它似乎完全扫描表2每次。当我拿到附近的表的末尾选择去更快
表1 NUM1(参考表来回0〜99)SQL,SQLite的选择从3个表
表2具有日期,结果(具有由日期和结果独特多条记录)
表3具有结果, NUM1,NUM2,NUM3
我谨结果如表3 加入表2和匹配各表1 NUM1到NUM1或NUM2或者NUM3的一个表3 其中的日期为<一些日期 按表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'
这将选择从NUM1,NUM2和NUM3表2中的独特价值。
不清楚为什么你需要Table1;但是,可以将此结果与Table1中的值结合起来,以确保所选值出现在表1中。
目前尚不清楚标题中提及的第三张表的含义,包含的内容或可能如何加入。
如我所料,如果没有提到问题的重点,您需要仔细澄清您希望看到的内容。
要限制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中的所有三个进行比较看起来很奇怪,更重要的是,对我来说效率非常低。
这是标题中引用的第三个表格吗? Table1中列的名称是什么?你究竟想要看什么?优化器如何扫描一个表对于优化器来说大多是一个问题。你有适当的索引吗? – 2011-04-13 03:38:30