联盟中的MYSQL,子查询引用

时间:2012-04-15 16:59:56

标签: mysql subquery

有没有办法在联合中引用子查询?

我正在尝试执行以下操作,并希望避免使用临时表,但子查询将从更大的数据集中提取,因此仅执行一次就有意义了。

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。

1 个答案:

答案 0 :(得分:1)

好吧,如果不重复创建派生表,就没有办法做你想做的事。

如果查询ads真的很贵,那么你应该尝试添加如下索引:

alter table ads add index (state, city, page, spot);

如果在添加该索引后查询占用太多,那么我建议创建一个表来存储这些数据,然后为每个点查询该表。

根据您的数据,您可以使用GROUP BY来获得类似的结果。