累积MySQL查询。如何使用多个FROM语句?

时间:2011-08-12 13:06:54

标签: mysql sql

我有一些分别运作良好的查询。这些查询中的每一个涉及用户在搜索结果时可能想要使用的不同类型的过滤器。每个查询从数据库中的5个表中获得完全相同的列。我想要实现的是累积使用过滤器(即,按日期和名称等搜索,或按地点和状态搜索)

我遇到的问题是将各个查询放在一起,以便将一个查询的结果用作下一个查询的起点。我已经阅读了相交以及如何在MySQL中实现这一点,但我认为我不想这样做,因为为了做到这一点,我必须完全运行我的所有查询然后找到需要的交叉点很多时候。

我想从我认为最小的查询开始,然后获得结果,然后使用这些结果作为下一个查询的起点。这可能是下一个查询必须为每个过滤器搜索5000个记录的多个表,或者将结果减少到少于200个查询以及下一个查询已经有一个可用的布局表的区别。

我以为我可以使用如下语法:

SELECT * FROM 
   (SELECT * FROM table1, table2, table3 WHERE DATE(trans_date) 
    BETWEEN DATE(from_date) AND DATE(to_date) 
        FROM (SELECT * FROM table1, table2, table3 
        WHERE name = "Joe" AND lname = "Bloggs")) 
WHERE status = "Open"

这可能吗?

非常感谢

2 个答案:

答案 0 :(得分:1)

我认为这正是您所寻找的:http://dev.mysql.com/doc/refman/5.0/en/subqueries.html

答案 1 :(得分:1)

总的来说 - 是的。虽然大多数RDBMS需要FROM iirc中每个子查询的别名,例如

SELECT * 
FROM (
 SELECT *
 FROM ....
 WHERE ...
) AS sub1