如何在sql查询中使用union,group和order

时间:2015-05-28 07:50:46

标签: sql union

我有桌子:List_of_payment,payment_tbl,foods_tbl,drinks_tbl

List_of_payment:

bill_id | year  | owner_ID 

101     | 2002  | 014

101     | 2002  | 014

101     | 2003  | 014

101     | 2003  | 014

101     | 2004  | 014

101     | 2005  | 014

payment_tbl:

bill_id | prod_foods_id | prod_drinks_id | prod_schooL_supply

101     |  123          |                |     

101     |               |     001        |    

101     |               |                |     234      

foods_tbl:

foods_id | name

123       | chocolate

021       | biscuit

312       | junk foods

drinks_tbl:

drinks_id | name

000       | coke

001       | juice

002       | milk

skol_supply_tbl:

supply_id | name

258       | pen

234       | pencil

987       | eraser

我的问题是如何使用“UNION”以显示年份的价值和(食物,饮料,skol供应的名称) 当我进入(foods_id,drinks_id,supply_id)

下面是我的代码:

“PK_ID”的值是= 123,001,234取决于用户

select payment_tbl.prod_foods_id,List_of_payment.year from payment_tbl 
join List_of_payment on payment_tbl.bill_id = List_of_payment.bill_id
where year in  (select year from List_of_payment where owner_id ='PK_ID') group by payment_tbl.prod_foods_id,List_of_payment.year order by List_of_payment.year 

Unioin

select payment_tbl.prod_drinks_id,List_of_payment.year from payment_tbl 
join List_of_payment on payment_tbl.bill_id = List_of_payment.bill_id
where year in  (select year from List_of_payment where owner_id ='PK_ID') group by payment_tbl.prod_drinks_id,List_of_payment.year order by List_of_payment.year 

UNion 

select payment_tbl.prod_schooL_supply,List_of_payment.year from payment_tbl 
join List_of_payment on payment_tbl.bill_id = List_of_payment.bill_id
where year in  (select year from List_of_payment where owner_id ='PK_ID') group by payment_tbl.prod_schooL_supply,List_of_payment.year order by List_of_payment.year 

当我执行我的查询时出现错误“ERROR:语法错误在或接近”union“”

提前致谢

1 个答案:

答案 0 :(得分:2)

试试这样:

SELECT  tbl.*
FROM    ( SELECT    payment_tbl.prod_foods_id,
                    List_of_payment.year
          FROM      payment_tbl
                    JOIN List_of_payment ON payment_tbl.bill_id = List_of_payment.bill_id
          WHERE     year IN ( SELECT    year
                              FROM      List_of_payment
                              WHERE     owner_id = 'PK_ID' )
          UNION
          SELECT    payment_tbl.prod_drinks_id,
                    List_of_payment.year
          FROM      payment_tbl
                    JOIN List_of_payment ON payment_tbl.bill_id = List_of_payment.bill_id
          WHERE     year IN ( SELECT    year
                              FROM      List_of_payment
                              WHERE     owner_id = 'PK_ID' )
          UNION
          SELECT    payment_tbl.prod_schooL_supply,
                    List_of_payment.year
          FROM      payment_tbl
                    JOIN List_of_payment ON payment_tbl.bill_id = List_of_payment.bill_id
          WHERE     year IN ( SELECT    year
                              FROM      List_of_payment
                              WHERE     owner_id = 'PK_ID' )
        ) tbl
GROUP BY payment_tbl.prod_drinks_id,
        List_of_payment.YEAR
ORDER BY List_of_payment.year