On Wednesday, 18 April 2018 12:18:51 UTC+2, su-sa wrote:
>
>
>
> Hi everyone,
>
> I've been trying quite a while to reproduce the following query:q2 = text(
>     "select top 100 s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, 
> s_phone, s_comment from system.part, "
>     "system.supplier, system.partsupp, system.nation, system.region where 
> p_partkey = ps_partkey "
>     "and s_suppkey = ps_suppkey and p_size = 15 and p_type like '%BRASS' and 
> s_nationkey = n_nationkey "
>     "and n_regionkey = r_regionkey and r_name = 'EUROPE' and ps_supplycost = 
> (select min(ps_supplycost) "
>     "from system.partsupp, system.supplier, system.nation, system.region 
> where p_partkey = ps_partkey "
>     "and s_suppkey = ps_suppkey and s_nationkey = n_nationkey and n_regionkey 
> = r_regionkey and r_name = 'EUROPE')"
>     " order by s_acctbal desc, n_name, s_name, p_partkey;")
>
>
> Thats what I have currently:
>
> q2 = session.query(Supplier.s_acctbal, Supplier.s_name, Nation.n_name, 
> Part.p_partkey, Part.p_mfgr,
>                    Supplier.s_address, Supplier.s_phone, 
> Supplier.s_comment).filter(Part.p_partkey == Partsupp.ps_partkey,
>                    Supplier.s_suppkey== Partsupp.ps_suppkey, Part.p_size == 
> 15, Part.p_type.like('%BRASS'),
>                    Supplier.s_nationkey == Nation.n_nationkey, 
> Nation.n_regionkey == Region.r_regionkey,
>                    Region.r_name == 'Europe', Partsupp.ps_supplycost == 
> func.min(Partsupp.ps_supplycost).filter(Part.p_partkey == Partsupp.ps_partkey,
>                    Supplier.s_suppkey == Partsupp.ps_suppkey, 
> Supplier.s_nationkey == Nation.n_nationkey,
>                    Nation.n_regionkey == Region.r_regionkey, Region.r_name == 
> 'EUROPE')).order_by(Supplier.s_acctbal.desc(),
>                    Nation.n_name, Part.p_partkey).limit(100)
>
> But I am getting the error:
>
> sqlalchemy.exc.DBAPIError: (hdbcli.dbapi.Error) (257, 'sql syntax error: 
> incorrect syntax near "FILTER": line 3 col 301 (at pos 649)') 
> [SQL: u'SELECT supplier.s_acctbal AS supplier_s_acctbal, supplier.s_name AS 
> supplier_s_name, nation.n_name AS nation_n_name, part.p_partkey AS 
> part_p_partkey, part.p_mfgr AS part_p_mfgr, 
> supplier.s_address AS supplier_s_address, supplier.s_phone AS 
> supplier_s_phone, supplier.s_comment AS supplier_s_comment \nFROM supplier, 
> nation, part, partsupp, region \nWHERE part.p_partkey = partsupp.ps_partkey 
> AND supplier.s_suppkey = partsupp.ps_suppkey AND part.p_size = ? AND 
> part.p_type LIKE ? AND supplier.s_nationkey = nation.n_nationkey AND 
> nation.n_regionkey = region.r_regionkey AND region.r_name = ? AND 
> partsupp.ps_supplycost = min(partsupp.ps_supplycost) FILTER (WHERE 
> part.p_partkey = partsupp.ps_partkey AND supplier.s_suppkey = 
> partsupp.ps_suppkey AND supplier.s_nationkey = nation.n_nationkey AND 
> nation.n_regionkey = region.r_regionkey AND region.r_name = ?) ORDER BY 
> supplier.s_acctbal DESC, nation.n_name, part.p_partkey\n LIMIT ?'] 
> [parameters: (15, '%BRASS', 'Europe', 'EUROPE', 100)] 
> (Background on this error at: http://sqlalche.me/e/dbapi)
>
>
> Which makes sense because inside the generated SQL Query, also the word 
> filter is present which is not recognised and because the nested select 
> statement is not generated.
>
> Could anyone of you tell me what I doing wrong? 
>
>
> Sorry if that seems to be a stupid question.
>
> Greetings,
> Sugandha
>
>

I also did the following: 

q2 = session.query(Supplier.s_acctbal, Supplier.s_name, Nation.n_name, 
Part.p_partkey, Part.p_mfgr,
                   Supplier.s_address, Supplier.s_phone, 
Supplier.s_comment).filter(Part.p_partkey == Partsupp.ps_partkey,
                   Supplier.s_suppkey== Partsupp.ps_suppkey, Part.p_size == 15, 
Part.p_type.like('%BRASS'),
                   Supplier.s_nationkey == Nation.n_nationkey, 
Nation.n_regionkey == Region.r_regionkey,
                   Region.r_name == 'Europe', Partsupp.ps_supplycost == 
session.query(func.min(Partsupp.ps_supplycost)).filter(Part.p_partkey == 
Partsupp.ps_partkey,
                   Supplier.s_suppkey == Partsupp.ps_suppkey, 
Supplier.s_nationkey == Nation.n_nationkey,
                   Nation.n_regionkey == Region.r_regionkey, Region.r_name == 
'EUROPE').correlate(Partsupp, Supplier, Nation, 
Region)).order_by(Supplier.s_acctbal.desc(),
                   Nation.n_name, Part.p_partkey).limit(100)

But this gives me a new error:

The column 'SUPPLIER.S_ACCTBAL' is invalid in the ORDER BY clause because the 
GROUP BY clause or an aggregation function does not contain it.

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to