1

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

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

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。

4

1 回答 1

1

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

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

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

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

根据您的数据,您可以GROUP BY尝试获得类似的结果。

于 2012-04-15T17:18:01.120 回答