SQL、SQLite从3个表中选择
表1从0到99的Num1参考表 表2有日期,结果有许多按日期和结果唯一的记录 表3给出了结果Num1、Num2、Num3 我想通过表3中的结果加入表2 并将表1中的Num1与表3中的Num1或Num2或Num3中的一个进行匹配 其中日期小于某个日期 按表1分组 因此只返回100行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
如果找到匹配的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中列的名称是什么?你到底想看什么?优化器如何扫描表主要是优化器的一个问题。你有适当的索引吗?