子查询使用JOINS

时间:2018-06-15 09:19:44

标签: mysql sql

我正在处理一个项目,并在使用某些连接时面临一个问题。 我有差异表和列,如:

tblpackages为

packagename 

packageid

stateid

packageduration

seater_4

seater_7

seater_14

tblstates as b

statename

stateid

tblpackage_packagetypes as c

packagetypeid

packageid

tblpackagetype as d

packagetypeid

packagetypename

tblpackageplaces as e

packageid

placeid

tblplaces as f

placeid

tblpackagedurations as g

packageid

days

hotelid

placeid

tblhotels as h

hotelid

我的查询如下:

 select a.packagename as packagename, a.packageid as packageid, 
    a.packageduration as days, a.seater_4, a.seater_7, a.seater_14,
    b.statename,
    substring_index(GROUP_CONCAT( DISTINCT (select f.placename )  SEPARATOR ', 
    '),',',4) placename,
    substring_index(GROUP_CONCAT( DISTINCT (select d.packagetypename )  SEPARATOR 
    ', '),',',4) packagetypename,
    (select sum(g.days) from tblpackagedurations g group by a.packageid )
    from tblpackages a
    join tblstates b on b.stateid = a.stateid              
    join tblpackage_packagetypes c on c.packageid = a.packageid
    join tblpackagetype d on d.packagetypeid = c.packagetypeid
    join tblpackageplaces e on e.packageid = a.packageid
    join tblplaces f on f.placeid = e.placeid
    join tblpackagedurations g on g.packageid = a.packageid
    join tblhotels h on h.hotelid = g.hotelid
                        where b.statename = 'jammu and kashmir'
                         group by a.packageid, g.packageid

和天的输出为:

packageid     days
**************************
1              10

2              10

3              10

4              10

持续时间的天数值为:

packageid     days
**************************
1              2

2              2

3              2

4              2

4              2

输出应为

1    2

2    2 

3     2

4     4

但它不是按照期望而且如果从a.package到d i.packageid更改分组我得到错误,因为子查询返回超过1行

1 个答案:

答案 0 :(得分:0)

如果我真的理解了你的问题(如果没有看到你的数据就很难),你必须对你不分组的字段进行汇总功能:

select a.packagename as packagename, a.packageid as packageid, 
sum(a.packageduration) as days, a.seater_4, a.seater_7, a.seater_14,
b.statename,
substring_index(GROUP_CONCAT( DISTINCT (select f.placename )  SEPARATOR ', 
'),',',4) placename,
substring_index(GROUP_CONCAT( DISTINCT (select d.packagetypename )  SEPARATOR 
', '),',',4) packagetypename,
(select sum(g.days) from tblpackagedurations g group by a.packageid )
from tblpackages a
join tblstates b on b.stateid = a.stateid              
join tblpackage_packagetypes c on c.packageid = a.packageid
join tblpackagetype d on d.packagetypeid = c.packagetypeid
join tblpackageplaces e on e.packageid = a.packageid
join tblplaces f on f.placeid = e.placeid
join tblpackagedurations g on g.packageid = a.packageid
join tblhotels h on h.hotelid = g.hotelid
                    where b.statename = 'jammu and kashmir'
                     group by a.packageid, g.packageid