У меня есть одна таблица, содержащая местоположение пользователей, и мне нужно рассчитать расстояние между каждым пользователем. В качестве результирующей таблицы у меня должна быть таблица длиной x * (x - 1) / 2
, где x
- длина таблицы пользователей. Но я получаю гораздо большую таблицу, потому что, когда предложение DISTINCT
не проверяет значения, отображаемые в другом порядке. В качестве упрощения, скажем, у меня есть эта таблица (в моей реальной таблице я использую CHAR (10) в качестве первичного ключа):
CREATE TABLE Users (
id INT PRIMARY KEY,
position INT
)
и для расчета расстояния между двумя пользователями мне нужно только вычтите их position
значение. Таким образом, запрос должен быть:
SELECT DISTINCT U1.id, U2.id, ABS(U1.position - U2.position) AS distance
FROM Users AS U1, Users AS U2
WHERE U1.position <> U2.position
, но в результате я получаю повторяющиеся значения, например:
+-------+-------+----------+
| U1.id | U2.id | distance |
+-------+-------+----------+
| 9 | 2 | 7 |
+-------+-------+----------+
| 2 | 9 | 7 |
+-------+-------+----------+
, тогда как вместо этого я должен получить только:
+-------+-------+----------+
| U1.id | U2.id | distance |
+-------+-------+----------+
| 9 | 2 | 7 |
+-------+-------+----------+