我把完整的code贴上来,高手帮忙看一下。
这个SQL语句原本是cache数据库用的,在cache中可以正常运行。
现在想改成MSSQL,弄了2天还没弄出来,头都大了,高手帮忙看一下,不胜感激,谢谢!!!在查询分析器里执行出错:
msg 107, 级别 16, 3, 状态行 1
列前缀 'RebuildCompanyM' 与查询中使名或别名不匹配。
msg 107, 级别 16, 3, 状态行 1
列前缀 'RebuildCompanyM' 与查询中使名或别名不匹配。
msg 107, 级别 16, 3, 状态行 1
列前缀 'RebuildCompanyM' 与查询中使名或别名不匹配。
SELECT A.RebuildCompanyID,
SUM(A.TargetPurchasedAmount) AS TargetPurchasedAmount,
SUM(A.SalesPromotionFee) AS SalesPromotionFee
FROM (
SELECT
RebuildCompanyM.RebuildCompanyID,
GroupMemberM.MemberID,
CAST(
CASE RebuildCalculation.PurchasedAmountEntrySpec
WHEN 0 THEN
ISNULL((RebuildClaimD.DiscountPurchasedAmount1 +
RebuildClaimD.DiscountPurchasedAmount2 +
RebuildClaimD.PurchasedAmount) - RebuildClaimD.DiscountAmount,0)
ELSE
ISNULL(RebuildSalesPromotionD.TargetPurchasedAmount,0)
END AS FLOAT) AS TargetPurchasedAmount,
CAST(
CASE RebuildCalculation.PurchasedAmountEntrySpec
WHEN 0 THEN
CASE (
SELECT COUNT(*) FROM Config
WHERE PurchaseForRefund <= RebuildClaimT.DiscountPurchasedAmount1 +
RebuildClaimT.DiscountPurchasedAmount2 +
RebuildClaimT.PurchasedAmount)
WHEN 0 THEN 0
ELSE (
SELECT ROUND(((RebuildClaimD.DiscountPurchasedAmount1 +
RebuildClaimD.DiscountPurchasedAmount2 +
RebuildClaimD.PurchasedAmount) -
RebuildClaimD.DiscountAmount) * RefundRate,0)
FROM Config
WHERE PurchaseForRefund <= RebuildClaimT.DiscountPurchasedAmount1 +
RebuildClaimT.DiscountPurchasedAmount2 +
RebuildClaimT.PurchasedAmount)
END
ELSE
ISNULL(RebuildSalesPromotionD.SalesPromotionFee,0)
END AS FLOAT) AS SalesPromotionFee
FROM RebuildCompanyM,GroupMemberM
LEFT JOIN RebuildSalesPromotionD ON (RebuildSalesPromotionD.GeneratingMonth = '2008/01/01'
AND RebuildSalesPromotionD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildSalesPromotionD.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildClaimD ON (RebuildClaimD.GeneratingMonth = '2008/01/01'
AND RebuildClaimD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildClaimD.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildClaimT ON (RebuildClaimT.GeneratingMonth = '2008/01/01'
AND RebuildClaimT.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildCalculation ON (RebuildCalculation.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildCalculation.MemberID = GroupMemberM.MemberID)
WHERE (RebuildCompanyM.DeleteFlag = 0
AND GroupMemberM.DeleteFlag = 0
AND GroupMemberM.IsInputRebuild = 1)) A
GROUP BY A.RebuildCompanyID
ORDER BY A.RebuildCompanyID ASC
这个SQL语句原本是cache数据库用的,在cache中可以正常运行。
现在想改成MSSQL,弄了2天还没弄出来,头都大了,高手帮忙看一下,不胜感激,谢谢!!!在查询分析器里执行出错:
msg 107, 级别 16, 3, 状态行 1
列前缀 'RebuildCompanyM' 与查询中使名或别名不匹配。
msg 107, 级别 16, 3, 状态行 1
列前缀 'RebuildCompanyM' 与查询中使名或别名不匹配。
msg 107, 级别 16, 3, 状态行 1
列前缀 'RebuildCompanyM' 与查询中使名或别名不匹配。
SELECT A.RebuildCompanyID,
SUM(A.TargetPurchasedAmount) AS TargetPurchasedAmount,
SUM(A.SalesPromotionFee) AS SalesPromotionFee
FROM (
SELECT
RebuildCompanyM.RebuildCompanyID,
GroupMemberM.MemberID,
CAST(
CASE RebuildCalculation.PurchasedAmountEntrySpec
WHEN 0 THEN
ISNULL((RebuildClaimD.DiscountPurchasedAmount1 +
RebuildClaimD.DiscountPurchasedAmount2 +
RebuildClaimD.PurchasedAmount) - RebuildClaimD.DiscountAmount,0)
ELSE
ISNULL(RebuildSalesPromotionD.TargetPurchasedAmount,0)
END AS FLOAT) AS TargetPurchasedAmount,
CAST(
CASE RebuildCalculation.PurchasedAmountEntrySpec
WHEN 0 THEN
CASE (
SELECT COUNT(*) FROM Config
WHERE PurchaseForRefund <= RebuildClaimT.DiscountPurchasedAmount1 +
RebuildClaimT.DiscountPurchasedAmount2 +
RebuildClaimT.PurchasedAmount)
WHEN 0 THEN 0
ELSE (
SELECT ROUND(((RebuildClaimD.DiscountPurchasedAmount1 +
RebuildClaimD.DiscountPurchasedAmount2 +
RebuildClaimD.PurchasedAmount) -
RebuildClaimD.DiscountAmount) * RefundRate,0)
FROM Config
WHERE PurchaseForRefund <= RebuildClaimT.DiscountPurchasedAmount1 +
RebuildClaimT.DiscountPurchasedAmount2 +
RebuildClaimT.PurchasedAmount)
END
ELSE
ISNULL(RebuildSalesPromotionD.SalesPromotionFee,0)
END AS FLOAT) AS SalesPromotionFee
FROM RebuildCompanyM,GroupMemberM
LEFT JOIN RebuildSalesPromotionD ON (RebuildSalesPromotionD.GeneratingMonth = '2008/01/01'
AND RebuildSalesPromotionD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildSalesPromotionD.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildClaimD ON (RebuildClaimD.GeneratingMonth = '2008/01/01'
AND RebuildClaimD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildClaimD.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildClaimT ON (RebuildClaimT.GeneratingMonth = '2008/01/01'
AND RebuildClaimT.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildCalculation ON (RebuildCalculation.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildCalculation.MemberID = GroupMemberM.MemberID)
WHERE (RebuildCompanyM.DeleteFlag = 0
AND GroupMemberM.DeleteFlag = 0
AND GroupMemberM.IsInputRebuild = 1)) A
GROUP BY A.RebuildCompanyID
ORDER BY A.RebuildCompanyID ASC
SELECT A.RebuildCompanyID,
SUM(A.TargetPurchasedAmount) AS TargetPurchasedAmount,
SUM(A.SalesPromotionFee) AS SalesPromotionFee
FROM (
SELECT
RebuildCompanyM.RebuildCompanyID,
GroupMemberM.MemberID,
CAST(
CASE RebuildCalculation.PurchasedAmountEntrySpec
WHEN 0 THEN
ISNULL((RebuildClaimD.DiscountPurchasedAmount1 +
RebuildClaimD.DiscountPurchasedAmount2 +
RebuildClaimD.PurchasedAmount) - RebuildClaimD.DiscountAmount,0)
ELSE
ISNULL(RebuildSalesPromotionD.TargetPurchasedAmount,0)
END AS FLOAT) AS TargetPurchasedAmount,
CAST(
CASE RebuildCalculation.PurchasedAmountEntrySpec
WHEN 0 THEN
CASE (
SELECT COUNT(*) FROM Config
WHERE PurchaseForRefund <= RebuildClaimT.DiscountPurchasedAmount1 +
RebuildClaimT.DiscountPurchasedAmount2 +
RebuildClaimT.PurchasedAmount)
WHEN 0 THEN 0
ELSE (
SELECT ROUND(((RebuildClaimD.DiscountPurchasedAmount1 +
RebuildClaimD.DiscountPurchasedAmount2 +
RebuildClaimD.PurchasedAmount) -
RebuildClaimD.DiscountAmount) * RefundRate,0)
FROM Config
WHERE PurchaseForRefund <= RebuildClaimT.DiscountPurchasedAmount1 +
RebuildClaimT.DiscountPurchasedAmount2 +
RebuildClaimT.PurchasedAmount)
END
ELSE
ISNULL(RebuildSalesPromotionD.SalesPromotionFee,0)
END AS FLOAT) AS SalesPromotionFee
FROM RebuildCompanyM,GroupMemberM
LEFT JOIN RebuildSalesPromotionD ON (RebuildSalesPromotionD.GeneratingMonth = '2008/01/01'
AND RebuildSalesPromotionD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildSalesPromotionD.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildClaimD ON (RebuildClaimD.GeneratingMonth = '2008/01/01'
AND RebuildClaimD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildClaimD.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildClaimT ON (RebuildClaimT.GeneratingMonth = '2008/01/01'
AND RebuildClaimT.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildCalculation ON (RebuildCalculation.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildCalculation.MemberID = GroupMemberM.MemberID)
WHERE (RebuildCompanyM.DeleteFlag = 0
AND GroupMemberM.DeleteFlag = 0
AND GroupMemberM.IsInputRebuild = 1)) A
GROUP BY A.RebuildCompanyID
ORDER BY A.RebuildCompanyID ASC
-> FROM RebuildCompanyM join GroupMemberM on 连接条件。
/*
服务器: 消息 107,级别 16,状态 3,行 1
列前缀 't1' 与查询中所用的表名或别名不匹配。
*/
--> 模仿一个:TRY
select top 1 * from sysobjects a,syscolumns b left join systypes c on b.xusertype = c.xusertype
我也想重新写,不过这个逻辑复杂程度超出我的水平,我搞不定,头都大了。请高手帮忙把这个拆分一下,谢谢!!!
封装到一个xsd的DataSet中。
SUM(A.TargetPurchasedAmount) AS TargetPurchasedAmount,
SUM(A.SalesPromotionFee) AS SalesPromotionFee
FROM (
SELECT
RebuildCompanyM.RebuildCompanyID,
GroupMemberM.MemberID,
CAST(
CASE RebuildCalculation.PurchasedAmountEntrySpec
WHEN 0 THEN
ISNULL((RebuildClaimD.DiscountPurchasedAmount1 +
RebuildClaimD.DiscountPurchasedAmount2 +
RebuildClaimD.PurchasedAmount) - RebuildClaimD.DiscountAmount,0)
ELSE
ISNULL(RebuildSalesPromotionD.TargetPurchasedAmount,0)
END AS FLOAT) AS TargetPurchasedAmount,
CAST(
CASE RebuildCalculation.PurchasedAmountEntrySpec
WHEN 0 THEN
CASE (
SELECT COUNT(*) FROM Config
WHERE PurchaseForRefund <= RebuildClaimT.DiscountPurchasedAmount1 +
RebuildClaimT.DiscountPurchasedAmount2 +
RebuildClaimT.PurchasedAmount)
WHEN 0 THEN 0
ELSE (
SELECT ROUND(((RebuildClaimD.DiscountPurchasedAmount1 +
RebuildClaimD.DiscountPurchasedAmount2 +
RebuildClaimD.PurchasedAmount) -
RebuildClaimD.DiscountAmount) * RefundRate,0)
FROM Config
WHERE PurchaseForRefund <= RebuildClaimT.DiscountPurchasedAmount1 +
RebuildClaimT.DiscountPurchasedAmount2 +
RebuildClaimT.PurchasedAmount)
END
ELSE
ISNULL(RebuildSalesPromotionD.SalesPromotionFee,0)
END AS FLOAT) AS SalesPromotionFee --FROM RebuildCompanyM,GroupMemberM
FROM RebuildCompanyM cross join GroupMemberM LEFT JOIN RebuildSalesPromotionD ON (RebuildSalesPromotionD.GeneratingMonth = '2008/01/01'
AND RebuildSalesPromotionD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildSalesPromotionD.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildClaimD ON (RebuildClaimD.GeneratingMonth = '2008/01/01'
AND RebuildClaimD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildClaimD.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildClaimT ON (RebuildClaimT.GeneratingMonth = '2008/01/01'
AND RebuildClaimT.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildCalculation ON (RebuildCalculation.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildCalculation.MemberID = GroupMemberM.MemberID)
WHERE (RebuildCompanyM.DeleteFlag = 0
AND GroupMemberM.DeleteFlag = 0
AND GroupMemberM.IsInputRebuild = 1)) A
GROUP BY A.RebuildCompanyID
ORDER BY A.RebuildCompanyID ASC
--> okselect top 1 * from syscolumns b,sysobjects a left join systypes c on b.xusertype = c.xusertype
/*
服务器: 消息 107,级别 16,状态 2,行 2
列前缀 'b' 与查询中所用的表名或别名不匹配。
*/select top 1 * from syscolumns b,sysobjects a left join systypes c on 1=1 where b.xusertype = c.xusertype
-->ok
FROM RebuildCompanyM inner join
GroupMemberM on RebuildSalesPromotionD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
LEFT JOIN RebuildSalesPromotionD ON (RebuildSalesPromotionD.GeneratingMonth = '2008/01/01'
AND RebuildSalesPromotionD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildSalesPromotionD.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildClaimD ON (RebuildClaimD.GeneratingMonth = '2008/01/01'
AND RebuildClaimD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildClaimD.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildClaimT ON (RebuildClaimT.GeneratingMonth = '2008/01/01'
AND RebuildClaimT.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildCalculation ON (RebuildCalculation.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildCalculation.MemberID = GroupMemberM.MemberID)
表RebuildCompanyM中包含RebuildCompanyID字段;
表GroupMemberM中包含MemberID字段;
表RebuildSalesPromotionD中包含RebuildCompanyID和MemberID字段;
表RebuildClaimD中包含RebuildCompanyID和MemberID字段;
表RebuildClaimT中包含MemberID字段;
表RebuildCalculation中包含RebuildCompanyID和MemberID字段;
所有的表中都包含GeneratingMonth字段RebuildCompanyID、MemberID、GeneratingMonth都是表中的主键,因此具有唯一性。我没用过笛卡尔,不过从上面分析,应该不需要用笛卡尔积。逻辑是以日期(GeneratingMonth字段)为查询条件,计算出符合条件的金额合计数。
SUM(A.TargetPurchasedAmount) AS TargetPurchasedAmount,
SUM(A.SalesPromotionFee) AS SalesPromotionFee
FROM (
SELECT
RebuildCompanyM.RebuildCompanyID,
GroupMemberM.MemberID,
CAST(
CASE RebuildCalculation.PurchasedAmountEntrySpec
WHEN 0 THEN
ISNULL((RebuildClaimD.DiscountPurchasedAmount1 +
RebuildClaimD.DiscountPurchasedAmount2 +
RebuildClaimD.PurchasedAmount) - RebuildClaimD.DiscountAmount,0)
ELSE
ISNULL(RebuildSalesPromotionD.TargetPurchasedAmount,0)
END AS FLOAT) AS TargetPurchasedAmount,
CAST(
CASE RebuildCalculation.PurchasedAmountEntrySpec
WHEN 0 THEN
CASE (
SELECT COUNT(*) FROM Config
WHERE PurchaseForRefund <= RebuildClaimT.DiscountPurchasedAmount1 +
RebuildClaimT.DiscountPurchasedAmount2 +
RebuildClaimT.PurchasedAmount)
WHEN 0 THEN 0
ELSE (
SELECT ROUND(((RebuildClaimD.DiscountPurchasedAmount1 +
RebuildClaimD.DiscountPurchasedAmount2 +
RebuildClaimD.PurchasedAmount) -
RebuildClaimD.DiscountAmount) * RefundRate,0)
FROM Config
WHERE PurchaseForRefund <= RebuildClaimT.DiscountPurchasedAmount1 +
RebuildClaimT.DiscountPurchasedAmount2 +
RebuildClaimT.PurchasedAmount)
END
ELSE
ISNULL(RebuildSalesPromotionD.SalesPromotionFee,0)
END AS FLOAT) AS SalesPromotionFee
FROM RebuildSalesPromotionD left join GroupMemberM on RebuildSalesPromotionD.MemberID = GroupMemberM.MemberID
LEFT JOIN RebuildCompanyM ON RebuildSalesPromotionD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
LEFT JOIN RebuildClaimD ON RebuildClaimD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
LEFT JOIN RebuildClaimT ON RebuildClaimT.MemberID = GroupMemberM.MemberID
LEFT JOIN RebuildCalculation ON RebuildCalculation.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
WHERE RebuildCompanyM.DeleteFlag = 0
AND GroupMemberM.DeleteFlag = 0
AND GroupMemberM.IsInputRebuild = 1
and RebuildClaimD.MemberID = GroupMemberM.MemberID
and RebuildClaimT.MemberID = GroupMemberM.MemberID
and RebuildCalculation.MemberID = GroupMemberM.MemberID
and RebuildSalesPromotionD.GeneratingMonth = '2008/01/01'
and RebuildClaimD.GeneratingMonth = '2008/01/01'
and RebuildClaimT.GeneratingMonth = '2008/01/01') A
GROUP BY A.RebuildCompanyID
ORDER BY A.RebuildCompanyID ASC
msg 107, 级别 16, 3, 状态行 1
列前缀 'RebuildSalesPromotionD' 与查询中使名或别名不匹配。 18楼、23楼的方法执行没有报错。
等待测试数据。
SELECT A.RebuildCompanyID ,
| SUM(A.TargetPurchasedAmount) AS TargetPurchasedAmount,
| SUM(A.SalesPromotionFee) AS SalesPromotionFee
FROM
| (SELECT RebuildCompanyM.RebuildCompanyID,
| | GroupMemberM.MemberID ,
| | CAST(
| | CASE RebuildCalculation.PurchasedAmountEntrySpec
| | | WHEN 0
| | | THEN ISNULL((RebuildClaimD.DiscountPurchasedAmount1 + RebuildClaimD.DiscountPurchasedAmount2 +
| | | | RebuildClaimD.PurchasedAmount) - RebuildClaimD.DiscountAmount,0)
| | | ELSE ISNULL(RebuildSalesPromotionD.TargetPurchasedAmount,0)
| | END AS FLOAT) AS TargetPurchasedAmount,
| | CAST(
| | CASE RebuildCalculation.PurchasedAmountEntrySpec
| | | WHEN 0
| | | THEN
| | | | CASE
| | | | | | (SELECT COUNT(*)
| | | | | | FROM Config
| | | | | | WHERE PurchaseForRefund <= RebuildClaimT.DiscountPurchasedAmount1 +
| | | | | | | RebuildClaimT.DiscountPurchasedAmount2 +
| | | | | | | RebuildClaimT.PurchasedAmount
| | | | | | )
| | | | | WHEN 0
| | | | | THEN 0
| | | | | ELSE
| | | | | | (SELECT ROUND(((RebuildClaimD.DiscountPurchasedAmount1 +
| | | | | | | RebuildClaimD.DiscountPurchasedAmount2 +
| | | | | | | RebuildClaimD.PurchasedAmount) -
| | | | | | | RebuildClaimD.DiscountAmount) * RefundRate,0)
| | | | | | FROM Config
| | | | | | WHERE PurchaseForRefund <= RebuildClaimT.DiscountPurchasedAmount1 +
| | | | | | | RebuildClaimT.DiscountPurchasedAmount2 +
| | | | | | | RebuildClaimT.PurchasedAmount
| | | | | | )
| | | | END
| | | ELSE ISNULL(RebuildSalesPromotionD.SalesPromotionFee,0)
| | END AS FLOAT) AS SalesPromotionFee
| FROM RebuildCompanyM,
| | GroupMemberM
| | LEFT JOIN RebuildSalesPromotionD
| | ON (RebuildSalesPromotionD.GeneratingMonth = '2008/01/01'
| | | AND RebuildSalesPromotionD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
| | | AND RebuildSalesPromotionD.MemberID = GroupMemberM.MemberID)
| | LEFT JOIN RebuildClaimD
| | ON (RebuildClaimD.GeneratingMonth = '2008/01/01'
| | | AND RebuildClaimD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
| | | AND RebuildClaimD.MemberID = GroupMemberM.MemberID)
| | LEFT JOIN RebuildClaimT
| | ON (RebuildClaimT.GeneratingMonth = '2008/01/01'
| | | AND RebuildClaimT.MemberID = GroupMemberM.MemberID)
| | LEFT JOIN RebuildCalculation
| | ON (RebuildCalculation.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
| | | AND RebuildCalculation.MemberID = GroupMemberM.MemberID)
| WHERE (RebuildCompanyM.DeleteFlag = 0
| | AND GroupMemberM.DeleteFlag = 0
| | AND GroupMemberM.IsInputRebuild = 1)
| ) A
GROUP BY A.RebuildCompanyID
ORDER BY A.RebuildCompanyID ASC
看一下
| FROM RebuildCompanyM,
| | GroupMemberM
| | LEFT JOIN RebuildSalesPromotionDRebuildCompanyM与GroupMemberM变成笛卡尔了,怎么感觉都不是很顺
LEFT JOIN RebuildSalesPromotionD
ON (RebuildSalesPromotionD.GeneratingMonth = '2008/01/01'
AND RebuildSalesPromotionD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildSalesPromotionD.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildClaimD
ON (RebuildClaimD.GeneratingMonth = '2008/01/01'
AND RebuildClaimD.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildClaimD.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildClaimT
ON (RebuildClaimT.GeneratingMonth = '2008/01/01'
AND RebuildClaimT.MemberID = GroupMemberM.MemberID)
LEFT JOIN RebuildCalculation
ON (RebuildCalculation.RebuildCompanyID = RebuildCompanyM.RebuildCompanyID
AND RebuildCalculation.MemberID = GroupMemberM.MemberID)简化如下:
from A, B
left join C on C.1 = A.1 and C.2 = B.1
left join D on D.1 = A.1 and D.2 = B.1
left join E on E.1 = B.1
left join F on F.1 = A.1 and E.2 = B.1
我猜想应该是这样:
from A, B
left join C on C.1 = A.1 and C.2 = B.1
left join D on D.1 = A.1 and D.2 = B.1
left join E on E.1 = A.1 and E.2 = B.1
left join F on F.1 = A.1 and E.2 = B.1
为了保持一致.
这个语句是有问题,A与B其实就是笛卡尔积。这是问题1,
还有报错原因就是select A.RebuildCompanyID from ...
虚拟的A表中是没有RebuildCompanyID字段的,而是有RebuildCompanyM.RebuildCompanyID字段。
-> FROM RebuildCompanyM
left join GroupMemberM on 1 =1
单纯看语句没什么问题,根据提示,应该首先检查两边数据库结构是否一致FROM RebuildCompanyM,GroupMemberM这句在SQL中效率奇差