Наиболее эффективный SQL, DISTINCT или WHERE ... И - PullRequest
3 голосов
/ 07 марта 2012

Обе они работают, но есть ли лучший способ написать это?

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

актив таблица

asset

Ответы [ 2 ]

4 голосов
/ 07 марта 2012

Эти два запроса делают совершенно разные вещи.DISTINCT выбирает только уникальные asset_id строки, а другой запрос выбирает только те строки, где asset.map_id = 5.

Причина, по которой у вас тот же результат, - ваши данные.По некоторым другим данным у вас будут совершенно другие результаты.Таким образом, вы не можете сравнить эффективность.

2 голосов
/ 07 марта 2012

, поскольку ваш внешний ключ состоит из обоих столбцов, вы должны присоединиться к обоим столбцам ...

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...