最有效的SQL,DISTINCT或WHERE ... AND

时间:2012-03-07 19:36:57

标签: mysql sql

这两项工作都有效,但是有更好的方法来写这个吗?

1

SELECT asset_id,
       asset.category_id,
       x,
       y
FROM asset
INNER JOIN map_category
ON map_category.category_id = asset.category_id
WHERE asset.map_id = 5
AND map_category.map_id = 5

2。(已添加DISTINCT并删除了最后一行)

SELECT DISTINCT asset_id,
       asset.category_id,
       x,
       y
FROM asset
INNER JOIN map_category
ON map_category.category_id = asset.category_id
WHERE asset.map_id = 5

如果没有DISTINCT或最后一行AND map_cate...,我会得到3条记录。每个一个:

map_category

map_category

资产

asset

2 个答案:

答案 0 :(得分:4)

这两个查询完全不同。 DISTINCT仅选择唯一的asset_id行,而另一个查询仅选择asset.map_id = 5的行。

您获得相同结果的原因是您的数据。在其他一些数据上,您将获得完全不同的结果。所以你无法比较效率。

答案 1 :(得分:2)

由于您的外键由两个列组成,因此您应该在两个列上加入...

SELECT asset_id,
   asset.category_id,
   x,
   y
FROM asset
INNER JOIN map_category
ON map_category.category_id = asset.category_id
AND asset.map_id = map_category.map_id