SQL объединяет множество таблиц на postgresql - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть структура таблицы следующим образом:

measurements:

id | Value | sensor_id

Теперь у меня есть другая таблица, называемая датчиками, где

sensors:
id | Name | provider_id

Затем у меня есть еще одна таблица, которая называется Providers:

providers:
id | Name

Теперь я хочу выбрать все записи из таблицы измерений, где sensor_ID имеет определенный тип (заданный идентификатором).

Итак, я сделал что-то вроде:

select * from measurements, sensors, providers 
JOIN sensors on sensors.id = measurements.sensor_id 
JOIN providers on providers.id  = sensor.provider_id 
where provider.id = 1 LIMIT 100

Однако это возвращается с There is an entry for table "sensor_measurements", but it cannot be referenced from this part of the query. Я пробовал другие варианты на этом, но не смог заставить его работать.

Я использую Postgresql и использую инструмент PgAdmin.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Мне кажется, что ваше предложение FROM неверно.Это должно быть либо:

FROM 
     measurements 
     JOIN sensors on sensors.id = measurements.sensor_id 
     JOIN providers on providers.id  = sensor.provider_id 

, либо, альтернативно,

FROM
     measurements,
     sensors,
     providers
WHERE
     providers.id = 1 and
     sensors.provider_id = providers.id
     measurements.sensor_id = sensors.id

В данный момент вы включаете 3 нужные вам таблицы, но, кроме того, вы снова присоединяетесь к таблицам датчиков и поставщиков.всего 5 (насколько я могу это прочитать).

0 голосов
/ 21 ноября 2018

Никогда не используйте запятые в предложении FROM.Итак:

select *  -- you should list out the columns you want
from measurements m join
     sensors s
     on s.id = m.sensor_id join
     providers p
     on p.id  = s.provider_id 
where p.id = 1
limit 100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...