2016-07-05 118 views
0

我读过,加入请求通常是更有效的子查询。Mysql子查询转换内部联接

我想知道下面的查询是否可以转换为加入。 Personnaly,我不明白这是如何可能的。

只是为了让您知道,距离的计算是昂贵的,我只是想在子集(子查询的结果)上执行它。但是,外部查询并没有保留“order by”。这就是为什么我必须在外部查询中执行第二个命令。

有没有办法做得更好?

SELECT alias.*, [calculation of distance using table cities] AS distance 
FROM (SELECT item.* FROM item 
     WHERE item.postalCode IN ([Array of postal codes]) 
     ORDER BY item.creationTimestamp ASC LIMIT 0, 19) as myalias, 
     country_cities 
WHERE cities.postalCode = alias.postalCode 
ORDER BY myalias.creationTimestamp ASC 

回答

0

你可以改变它TO INNER JOIN如下

SELECT alias.*, [calculation of distance using table cities] AS distance 
FROM (SELECT item.* FROM item 
     WHERE item.postalCode IN ([Array of postal codes]) 
     ORDER BY item.creationTimestamp ASC LIMIT 0, 19) myalias INNER JOIN country_cities 
WHERE cities.postalCode = alias.postalCode 
ORDER BY myalias.creationTimestamp ASC