Я хочу найти пару: каждая зона со всеми магазинами из моей таблицы store
, где связанная зона закрыта для зоны. Следующий sql запрос работает хорошо:
SELECT zone_1.id AS zone_1_id, store_1.id AS store_1_id
FROM zone as zone_1 JOIN store store_1 on store_1.zone_id != zone_1.id
WHERE ST_DWithin(zone_1.point, (SELECT zone2.point AS zone_point
FROM zone as zone2
WHERE zone2.id = store_1.zone_id), 10)
Но когда я конвертировал его в sqlalchemy, что-то не получилось:
z1 = aliased(zone)
z2 = aliased(zone)
s1 = aliased(store)
close_store_query = z1.query(z1.id,s1.id).join(s1, z1.id != s1.zone_id ).filter(
func.ST_DWithin(z1.point, z2.query(z2.point).filter(z2.id == s1.zone_id), 10),
)
я получил следующую ошибку:
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.SyntaxError) subquery in FROM must have an alias
Есть ли у вас какие-либо идеи о том, почему он не работает, я не уверен, нужно ли мне использовать выбираемый подзапрос.
Команда, сгенерированная sqlalchemy:
SELECT zone_1.id AS zone_1_id, store_1.id AS store_1_id
FROM (SELECT zone_2.point AS zone_2_point
FROM zone AS zone_2, store AS store_1
WHERE zone_2.id = store_1.zone_id), zone AS zone_1 JOIN store AS store_1 ON zone_1.id != store_1.zone_id
WHERE ST_DWithin(zone_1.point, (SELECT zone_2.point AS zone_2_point
FROM zone AS zone_2
WHERE zone_2.id = store_1.zone_id), :ST_DWithin_1)
Первый ОТ не должен быть там ..