PostgeSQL给我“在FROM中的子查询必须具有别名”错误,但是所有子查询都具有别名

时间:2018-07-31 09:25:20

标签: sql postgresql

我希望有人可以提供帮助,因为这非常麻烦,我需要很长的SELECT子选择项,因为我需要多个细分,并且每次在底部添加最后一个INNER JOIN时都会遇到别名错误,请协助:( 谢谢您的时间:

    SELECT 
    aa.transaction,
    aa.meta_block_timestamp,
    aa.blockchain_transaction_id,
    COUNT(aa.to_val), SUM(aa.value_int) FROM (

  SELECT DISTINCT 
        transactions.transaction, 
        transactions.blockchain_transaction_id,
        transactions.meta_block_timestamp,
        to_val, value_int 
    FROM accounts INNER JOIN transactions
        ON accounts.account = transactions.origin
            INNER JOIN blockchain
                ON blockchain.number = transactions.blockchain_transaction_id
                    INNER JOIN clauses
                        ON transactions.transaction = clauses.transaction_id  
                            WHERE accounts.account = LOWER('0xe0EB562acD5F10A60EB3c37886C58fe90d7086BE') 
    ) as aa             

   INNER JOIN (     
        /* adding this SELECT below causes the problem :( */
        SELECT yy.transaction, count(yy.to_val) FROM (
          SELECT DISTINCT transaction, clauses.to_val FROM transactions 
             INNER JOIN clauses 
                 ON transactions.transaction = clauses.transaction_id
                    WHERE transactions.transaction = LOWER('0x90154fb433a6f2a308fd0b27e50f4a29d22c1cb8c7e4b00cbf608dd0b0019ce8')
                    GROUP BY yy.transaction
          ) as yy 
  ) as BB on aa.transaction = BB.transaction  

  GROUP BY  

      BB.transaction,
      aa.transaction, 
      aa.meta_block_timestamp,
      aa.blockchain_transaction_id
  ORDER BY aa.meta_block_timestamp DESC

塞恩

1 个答案:

答案 0 :(得分:1)

我修复了SQL,添加了BB别名,希望对您有所帮助。 (我真的不知道您的SQL表和用途)

SELECT 
    aa.transaction,
    aa.meta_block_timestamp,
    aa.blockchain_transaction_id,
    COUNT(aa.to_val), SUM(aa.value_int) FROM (

  SELECT DISTINCT 
        transactions.transaction, 
        transactions.blockchain_transaction_id,
        transactions.meta_block_timestamp,
        to_val, value_int 
    FROM accounts INNER JOIN transactions
        ON accounts.account = transactions.origin
            INNER JOIN blockchain
                ON blockchain.number = transactions.blockchain_transaction_id
                    INNER JOIN clauses
                        ON transactions.transaction = clauses.transaction_id  
                            WHERE accounts.account = LOWER('0xe0EB562acD5F10A60EB3c37886C58fe90d7086BE') 
    ) as aa             

   INNER JOIN (     
        /* adding this SELECT below causes the problem :( */
        SELECT yy.transaction, count(yy.to_val) FROM (
          SELECT DISTINCT transaction, clauses.to_val FROM transactions 
             INNER JOIN clauses 
                 ON transactions.transaction = clauses.transaction_id
                    WHERE transactions.transaction = LOWER('0x90154fb433a6f2a308fd0b27e50f4a29d22c1cb8c7e4b00cbf608dd0b0019ce8')
          ) as yy 
  ) as BB on aa.transaction = BB.transaction  

  GROUP BY  
      BB.transaction,
      aa.transaction, 
      aa.meta_block_timestamp,
      aa.blockchain_transaction_id
  ORDER BY aa.meta_block_timestamp DESC