PostgresQL ОШИБКА: оператор не существует: целое число = целое число [] - PullRequest
1 голос
/ 30 сентября 2019

Я делаю SQL JOIN...ON, в котором столбец другой таблицы, к которой нужно присоединиться, представляет собой массив с набором строк, и поэтому я сталкиваюсь с этой ошибкой. В частности, я делаю JOIN для таблиц.

TABLE: location

+------------+------------+---------+----------+
| session_id |  gpstime   |   lat   | lon      |
+------------+------------+---------+----------+
|         49 | 1458203595 | 39.7449 | -8.8052  |
|         59 | 1458203601 | 39.7438 | -8.8057  |
|         95 | 1458203602 | 39.7438 | -8.8056  |
|         49 | 1458203602 | 39.7438 | -8.8057  |
+------------+------------+---------+----------+

TABLE: trips

+-------------+-----------+---------+-----------+---------+-------------+
| session_ids | lat_start | lat_end | lon_start | lon_end | travel_mode |
+-------------+-----------+---------+-----------+---------+-------------+
| {49}        | 39.7449   | 41.1782 | -8.8053   | -8.5946 | car         |
| {59,60}     | 41.1551   | 41.1542 | -8.6294   | -8.6247 | foot        |
| {94,95}     | 41.1545   | 40.7636 | -8.6273   | -8.1729 | bike        |
+-------------+-----------+---------+-----------+---------+-------------+

Вот запрос, который я использовал:

SELECT gpstime, lat, lon,  travel_mode
FROM location
INNER JOIN trips
    ON session_id = session_ids
WHERE (lat BETWEEN SYMMETRIC lat_start AND lat_end) 
   AND (lon BETWEEN SYMMETRIC lon_start AND lon_end);

Ошибка:

ERROR:  operator does not exist: integer = integer[]
LINE 4:  ON session_id = session_ids

Как решить проблему?

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

Компаратор = может сравнивать только два значения одного типа. Но здесь вы пытаетесь сравнить целочисленное значение с массивом. Таким образом, значение 1 не может быть равно значению, которое выглядит как [1,2].

. Вы можете использовать компаратор = ANY(...), который проверяет, является ли левое значение частью правого массива:

демо: дБ <> скрипка

ON session_id = ANY(session_ids)
0 голосов
/ 30 сентября 2019

S-Man является верным, хотя вы также можете использовать ЛЮБУЮ функцию, как описано здесь .

Для получения дополнительной информации о различиях между использованием IN и ANY / ALL, прочитайте этот вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...