SQL,SQLite从3个表中选择

时间:2011-04-13 03:32:54

标签: sql sqlite

表1 Num1(参考表从0到99)

表2包含日期,结果(日期和结果有许多独特的记录)

表3具有结果,Num1,Num2,Num3

我想按表3中的结果加入表2 并将表1 Num1中的每一个与表3中的Num1或Num2或Num3中的一个相匹配 日期是<一些日期 按表1分组 所以只返回100行。

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

2 个答案:

答案 0 :(得分: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'

这将从表2中的Num1,Num2和Num3中选择唯一值。

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

目前尚不清楚标题中提到的第三个表格在哪里,它包含什么,或者如何加入。

如果,正如我所料,这是错过了问题的重点,你需要仔细澄清你希望看到的内容。

答案 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中的所有三个进行比较看起来非常奇怪,更重要的是,对我来说非常低效。