clickhouse SQL 怎么写才正确?

How to write clickhouse SQL correctly?

SQL 可以在 Oracle 上执行,但不能在 clickhouse 上执行:

SELECT *
FROM PART, PARTSUPP
WHERE P_PARTKEY = PS_PARTKEY
    AND PS_SUPPLYCOST = (
        SELECT MIN(PS_SUPPLYCOST)
        FROM PARTSUPP
        WHERE P_PARTKEY = PS_PARTKEY
    )

异常: Missing columns: 'P_PARTKEY' while processing query: 'SELECT min(PS_SUPPLYCOST)...

我们将不胜感激。

谢谢。

相关子查询SQL:

SELECT
    *
FROM
    (
    SELECT
        S_ACCTBAL,
        S_NAME,
        N_NAME,
        P_PARTKEY,
        P_MFGR ,
        S_ADDRESS,
        S_PHONE,
        S_COMMENT
    FROM
        PART,
        SUPPLIER,
        PARTSUPP,
        NATION,
        REGION
    WHERE
        P_PARTKEY = PS_PARTKEY
        AND S_SUPPKEY = PS_SUPPKEY
        AND P_SIZE = 25
        AND P_TYPE LIKE '%COPPER'
        AND S_NATIONKEY = N_NATIONKEY
        AND N_REGIONKEY = R_REGIONKEY
        AND R_NAME = 'ASIA'
        AND PS_SUPPLYCOST = (
        SELECT
            MIN(PS_SUPPLYCOST)
        FROM
            PARTSUPP,
            SUPPLIER,
            NATION,
            REGION
        WHERE
            P_PARTKEY = PS_PARTKEY
            AND S_SUPPKEY = PS_SUPPKEY
            AND S_NATIONKEY = N_NATIONKEY
            AND N_REGIONKEY = R_REGIONKEY
            AND R_NAME = 'ASIA' )
    ORDER BY
        S_ACCTBAL DESC,
        N_NAME,
        S_NAME,
        P_PARTKEY )
WHERE
    ROWNUM <= 100;

对于 Clickhouse:

SELECT
    *
from
    (
    SELECT
        s.S_ACCTBAL AS S_ACCTBAL,
        s.S_NAME AS S_NAME,
        n.N_NAME AS N_NAME,
        p.P_PARTKEY AS P_PARTKEY,
        p.P_MFGR AS P_MFGR,
        s.S_ADDRESS AS S_ADDRESS,
        s.S_PHONE AS S_PHONE,
        s.S_COMMENT AS S_COMMENT
    FROM
        PART AS p,
        PARTSUPP AS ps,
        SUPPLIER AS s,
        NATION AS n,
        REGION AS r,
        (
        SELECT
            P_PARTKEY,
            MIN(PS_SUPPLYCOST) AS PS_SUPPLYCOST
        FROM
            PARTSUPP,
            PART,
            SUPPLIER,
            NATION,
            REGION
        WHERE
            P_PARTKEY = PS_PARTKEY
            AND S_SUPPKEY = PS_SUPPKEY
            AND S_NATIONKEY = N_NATIONKEY
            AND N_REGIONKEY = R_REGIONKEY
            AND R_NAME = 'ASIA'
        GROUP BY
            P_PARTKEY) pps
    WHERE
        p.P_PARTKEY = pps.P_PARTKEY
        AND ps.PS_SUPPLYCOST = pps.PS_SUPPLYCOST
        AND p.P_PARTKEY = ps.PS_PARTKEY
        AND s.S_SUPPKEY = ps.PS_SUPPKEY
        AND p.P_SIZE = 25
        AND p.P_TYPE LIKE '%COPPER'
        AND s.S_NATIONKEY = n.N_NATIONKEY
        AND n.N_REGIONKEY = r.R_REGIONKEY
        AND r.R_NAME = 'ASIA')
ORDER BY
    S_ACCTBAL DESC,
    N_NAME,
    S_NAME,
    P_PARTKEY
LIMIT 100;