这两项工作都有效,但是有更好的方法来写这个吗?
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 表
资产表
答案 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