Tôi có truy vấn SQL follwing (Nó được là lớn nhất của một cột nhất định cho mỗi nhóm, với 3 điều cần nhóm bằng):Tham gia vào một subquery trong SQLAlchemy
select p1.Name, p1.nvr, p1.Arch, d1.repo, p1.Date
from Packages as p1 inner join
Distribution as d1
on p1.rpm_id = d1.rpm_id inner join (
select Name, Arch, repo, max(Date) as Date
from Packages inner join Distribution
on Packages.rpm_id = Distribution.rpm_id
where Name like 'p%' and repo not like '%staging'
group by Name, Arch, repo
) as sq
on p1.Name = sq.Name and p1.Arch = sq.Arch and d1.repo = sq.repo and p1.Date = sq.Date
order by p1.nvr
Và tôi đang cố gắng để chuyển đổi nó đến SQLAlchemy. Đây là những gì tôi có cho đến thời điểm này:
p1 = aliased(Packages)
d1 = aliased(Distribution)
sq = session.\
query(
Packages.Name,
Packages.Arch,
Distribution.repo,
func.max(Packages.Date).\
label('Date')).\
select_from(
Packages).\
join(
Distribution).\
filter(
queryfilter).\
filter(
not_(Distribution.repo.\
like('%staging'))).\
group_by(
Packages.Name,
Packages.Arch,
Distribution.repo).subquery()
result = session.\
query(
p1, d1.repo).\
select_from(
p1).\
join(
d1).\
join(
sq,
p1.Name==sq.c.Name,
p1.Arch==sq.c.Arch,
d1.repo==sq.c.repo,
p1.Date==sq.c.Date).\
order_by(p1.nvr).all()
Sự cố phát sinh khi tôi tham gia vào truy vấn phụ. Tôi nhận được một lỗi mà nói rằng không có từ khoản để tham gia từ. Điều này là lạ bởi vì tôi chỉ định một quyền sau khi truy vấn con trong tham gia funciton làm đối số. Bất kỳ ý tưởng những gì tôi đang làm sai? Có lẽ tôi cần phải bí danh một cái gì đó và làm một select_from một lần nữa?
EDIT: lỗi chính xác
Could not find a FROM clause to join from. Tried joining to SELECT "Packages"."Name", "Packages"."Arch", "Distribution".repo, max("Packages"."Date") AS "Date" FROM "Packages" JOIN "Distribution" ON "Packages".rpm_id = "Distribution".rpm_id WHERE "Packages"."Name" LIKE :Name_1 AND "Distribution".repo NOT LIKE :repo_1 GROUP BY "Packages"."Name", "Packages"."Arch", "Distribution".repo, but got: Can't find any foreign key relationships between 'Join object on %(139953254400272 Packages)s(139953254400272) and %(139953256322768 Distribution)s(139953256322768)' and '%(139953257005520 anon)s'.
Nó cố gắng tham gia, nhưng nó nói nó không biết nơi nào để làm cho tham gia. Có gì sai với cú pháp của tôi không? Tôi nghĩ nó chính xác dựa trên những gì trong hàm nối.
Cố gắng đặt bí danh truy vấn phụ và cũng cố gắng làm việc với các điều kiện kết hợp theo nghĩa đen. Bạn có thể cần hết hạn một chút ở đây. – javex
Tôi có thể sử dụng điều kiện tham gia theo nghĩa đen như thế nào? Ý bạn là như thế nào. Tôi cũng đã cập nhật bài đăng của mình với lỗi cụ thể. – miscsubbin