有没有办法在联合中引用子查询?
我正在尝试执行以下操作,并希望避免使用临时表,但子查询将从更大的数据集中提取,因此仅执行一次就有意义了。
SELECT * FROM (SELECT * FROM ads WHERE state='FL' AND city='Maitland' AND page='home' ORDER BY RAND()) AS sq WHERE spot = 'full-banner' LIMIT 1
UNION
SELECT * FROM sq WHERE spot = 'leaderboard' LIMIT 1
UNION
SELECT * FROM sq WHERE spot = 'rectangle1' LIMIT 1
UNION
SELECT * FROM sq WHERE spot = 'rectangle2' LIMIT 1
.... etc,,
遗憾的是,无法为结果集的单个列指定DISTINCT。
答案 0 :(得分:1)
好吧,如果不重复创建派生表,就没有办法做你想做的事。
如果查询ads
真的很贵,那么你应该尝试添加如下索引:
alter table ads add index (state, city, page, spot);
如果在添加该索引后查询占用太多,那么我建议创建一个表来存储这些数据,然后为每个点查询该表。
根据您的数据,您可以使用GROUP BY
来获得类似的结果。