首先,Mysql分组后,查询的字段可以不是分组的字段,而SQL Server和Oracle必须是
目前的问题
select
billData1.constractId
from
(
select
voucher_order_Order.`constractId` as `constractId`,
voucher_order_Order.`constractName` as `constractName`,
voucher_order_Order.`constractCode` as `constractCode`,
voucher_order_Order.`zrztName` as `zrztName`
from
(
select
ifnull(T1.bigint_0, T7.id) as `constractId`,
ifnull(T8.code, T7.code) as constractCode,
ifnull(T8.ctname, T7.ctname) as constractName,
T3.name as `zrztName`,
T0.cOrderNo
from
uorders.orders T0
left join uorders.orders_character_define_1 T2 on T2.id = T0.orderDefineCharacter
left join iuap_apdoc_basedoc.org_admin T3 on T3.id = T2.vcol1
left join uorders.iuap_extend_gal3au79_orders_0 T1 on T1.id = T0.id
left join sact.sact_salescontract T8 on T1.bigint_0 = T8.id
left join sact.sact_salescontract T7 on T7.Code = T2.vcol3
where
T0.iShopID = -1
and T0.verifystate = '2'
) voucher_order_Order
where
voucher_order_Order.constractId is not null
GROUP by
voucher_order_Order.constractId,
voucher_order_Order.`zrztName`
) billData1
group by
billData1.constractId
很简单的一个关联,但是问题就出现了!根据上面的SQL查询,乍看一看没什么问题,但是当在group外面加上条件后
select zrztName from (
select
billdata1.constractId,
billdata1.constractName,
billdata1.constractCode,
billdata1.zrztName
from
(
select
voucher_order_Order.`constractId` as `constractId`,
voucher_order_Order.`constractName` as `constractName`,
voucher_order_Order.`constractCode` as `constractCode`,
voucher_order_Order.`zrztName` as `zrztName`
from
(
select
ifnull(T1.bigint_0, T7.id) as `constractId`,
ifnull(T8.code, T7.code) as constractCode,
ifnull(T8.ctname, T7.ctname) as constractName,
T3.name as `zrztName`,
T0.cOrderNo
from
uorders.orders T0
left join uorders.orders_character_define_1 T2 on T2.id = T0.orderDefineCharacter
left join iuap_apdoc_basedoc.org_admin T3 on T3.id = T2.vcol1
left join uorders.iuap_extend_gal3au79_orders_0 T1 on T1.id = T0.id
left join sact.sact_salescontract T8 on T1.bigint_0 = T8.id
left join sact.sact_salescontract T7 on T7.Code = T2.vcol3
where
T0.iShopID = -1
and T0.verifystate = '2'
) voucher_order_Order
where
voucher_order_Order.constractId is not null
GROUP by
voucher_order_Order.constractId,
voucher_order_Order.`zrztName`
) billData1
group by
billData1.constractId
)a where a.zrztName = '杨学彬大区'
查询记录为17条,这时也没发现什么问题,但是把where的条件加到group by前面后
select
zrztName
from
(
select
billdata1.constractId,
billdata1.constractName,
billdata1.constractCode,
billdata1.zrztName
from
(
select
voucher_order_Order.`constractId` as `constractId`,
voucher_order_Order.`constractName` as `constractName`,
voucher_order_Order.`constractCode` as `constractCode`,
voucher_order_Order.`zrztName` as `zrztName`
from
(
select
ifnull(T1.bigint_0, T7.id) as `constractId`,
ifnull(T8.code, T7.code) as constractCode,
ifnull(T8.ctname, T7.ctname) as constractName,
T3.name as `zrztName`,
T0.cOrderNo
from
uorders.orders T0
left join uorders.orders_character_define_1 T2 on T2.id = T0.orderDefineCharacter
left join iuap_apdoc_basedoc.org_admin T3 on T3.id = T2.vcol1
left join uorders.iuap_extend_gal3au79_orders_0 T1 on T1.id = T0.id
left join sact.sact_salescontract T8 on T1.bigint_0 = T8.id
left join sact.sact_salescontract T7 on T7.Code = T2.vcol3
where
T0.iShopID = -1
and T0.verifystate = '2'
) voucher_order_Order
where
voucher_order_Order.constractId is not null
GROUP by
voucher_order_Order.constractId,
voucher_order_Order.`zrztName`
) billData1
where
zrztName = '杨学彬大区'
group by
billData1.constractId
) a
奇葩的来了,这时候查出来数据是18条
为啥呢?
原因很简单!!!!!!!!