Накопительные запросы MySQL.Как использовать несколько операторов FROM? - PullRequest
0 голосов
/ 12 августа 2011

У меня есть несколько запросов, которые работают хорошо отдельно. Каждый из этих запросов относится к другому типу фильтра, который пользователь может захотеть использовать при поиске результатов. Каждый из запросов получает одинаковые столбцы из 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 ]

1 голос
/ 12 августа 2011

В общем - да. Хотя большинству СУБД требуется псевдоним для каждого подзапроса в FROM iirc, что-то вроде

SELECT * 
FROM (
 SELECT *
 FROM ....
 WHERE ...
) AS sub1
1 голос
/ 12 августа 2011

Я думаю, это то, что вы ищете: http://dev.mysql.com/doc/refman/5.0/en/subqueries.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...