急:高难度SQL。

13abyKnight 2009-09-22 10:39:50
SELECT *
FROM (

SELECT *
FROM (

SELECT c. * , r. *
FROM RIGHT_TEST AS c
LEFT JOIN authorize_table AS r ON r.TABLE_NO =1
AND c.TABLE_ID = r.TABLE_REC_ID
AND (
(
PUB_IN_RIGHT_TYPE <= -10
AND PUC_DEPART_TYPE =2
AND PUC_DEPART_ID1 =1
)
OR (
PUB_out_RIGHT_TYPE <= -10
AND PUC_DEPART_TYPE =2
AND PUC_DEPART_ID1 !=1
)
)
ORDER BY r.PRI DESC
) AS z
GROUP BY z.TABLE_ID
ORDER BY z.TABLE_ID ASC
) AS s
WHERE (
PUB_IN_RIGHT_TYPE >0
AND PUC_DEPART_TYPE =2
AND PUC_DEPART_ID1 =1
)
OR (
PUB_OUT_RIGHT_TYPE >0
AND PUC_DEPART_TYPE =2
AND PUC_DEPART_ID1 !=1
)
OR (
PUB_IN_RIGHT_TYPE <= -10
AND PEOPLE_SET_TYPE =2
AND PEOPLE_SET_ID1 =1
AND REC_RIGHT_TYPE >0
)
OR (
PUB_IN_RIGHT_TYPE <= -11
AND PEOPLE_SET_TYPE IS NULL
)

这句SQL在MYSQL 与ORACLE 运行没问题。而是在server系列服务器上运行出现问题。
比如
除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。

选择列表中的列 'z.NAME' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

我主要目的想过滤没指定的数据根据ID来过滤。

...全文
161 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
navy887 2009-09-22
  • 打赏
  • 举报
回复
好像子查询使用了ORDER BY
chinahue 2009-09-22
  • 打赏
  • 举报
回复
希望早日解决,学习
13abyKnight 2009-09-22
  • 打赏
  • 举报
回复
对不起,各位没有说明白具体内容吧!


张三 1 21 2 1 1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL -11 0 2 1 1 NULL NULL NULL NULL 4 GG 1 1 2 1 NULL NULL NULL 1 NULL NULL 4
张三 1 21 2 1 1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL -11 0 2 1 1 NULL NULL NULL NULL 2 Sr 1 1 2 1 NULL NULL NULL 1 NULL NULL 2
张三 1 21 2 1 1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL -11 0 2 1 1 NULL NULL NULL NULL 1 Mr 1 1 2 1 NULL NULL NULL 1 NULL NULL 1
王五 1 19 2 3 1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL -11 0 2 1 1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
SQL77 2009-09-22
  • 打赏
  • 举报
回复
哇,子查询那么多
soft_wsx 2009-09-22
  • 打赏
  • 举报
回复
好多条件!好多子查询!
13abyKnight 2009-09-22
  • 打赏
  • 举报
回复
是的,没办法。为了各各服务器的通用跟表设计有关系。
--小F-- 2009-09-22
  • 打赏
  • 举报
回复
好多or 效率很低
JonasFeng 2009-09-22
  • 打赏
  • 举报
回复
子查询里不能用ORDER BY
souperstar 2009-09-22
  • 打赏
  • 举报
回复
子查询过多,严重影响性能啊,建议改用临时表~~
7761098 2009-09-22
  • 打赏
  • 举报
回复

SELECT *
FROM
( SELECT z.TABLE_ID,
z.[NAME] ,
z.*
FROM
( SELECT c. * ,
r. *
FROM RIGHT_TEST AS c
LEFT JOIN authorize_table AS r
ON r.TABLE_NO =1
AND c.TABLE_ID = r.TABLE_REC_ID
AND
(
(
PUB_IN_RIGHT_TYPE <= -10
AND PUC_DEPART_TYPE =2
AND PUC_DEPART_ID1 =1
)
OR
(
PUB_out_RIGHT_TYPE <= -10
AND PUC_DEPART_TYPE =2
AND PUC_DEPART_ID1 !=1
)
)
) AS z
GROUP BY z.TABLE_ID,
z.[NAME]
) AS s
WHERE
(
PUB_IN_RIGHT_TYPE >0
AND PUC_DEPART_TYPE =2
AND PUC_DEPART_ID1 =1
)
OR
(
PUB_OUT_RIGHT_TYPE >0
AND PUC_DEPART_TYPE =2
AND PUC_DEPART_ID1 !=1
)
OR
(
PUB_IN_RIGHT_TYPE <= -10
AND PEOPLE_SET_TYPE =2
AND PEOPLE_SET_ID1 =1
AND REC_RIGHT_TYPE >0
)
OR
(
PUB_IN_RIGHT_TYPE <= -11
AND PEOPLE_SET_TYPE IS NULL
)
ORDER BY PRI DESC,
TABLE_ID ASC

类似这样吧,不太清楚你的table structure,不过group by不能与*连用吧
13abyKnight 2009-09-22
  • 打赏
  • 举报
回复
不知道,怎么该去修改啦!
呵呵, 我使用的是server2005
haitao 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 devilkorhenn 的回复:]

这句SQL在MYSQL 与ORACLE 运行没问题。而是在server系列服务器上运行出现问题。
比如
除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。

选择列表中的列 'z.NAME' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

我主要目的想过滤没指定的数据根据ID来过滤。
[/Quote]

错误说的很清楚了。。。。。。。
只是格式化一下:

SELECT *
FROM (SELECT *
FROM (SELECT c.*
,r.*
FROM RIGHT_TEST AS c
LEFT JOIN authorize_table AS r
ON r.TABLE_NO = 1
AND c.TABLE_ID = r.TABLE_REC_ID
AND ((PUB_IN_RIGHT_TYPE <= -10
AND PUC_DEPART_TYPE = 2
AND PUC_DEPART_ID1 = 1)
OR (PUB_out_RIGHT_TYPE <= -10
AND PUC_DEPART_TYPE = 2
AND PUC_DEPART_ID1 != 1))
ORDER BY r.PRI DESC) AS z
GROUP BY z.TABLE_ID
ORDER BY z.TABLE_ID ASC) AS s
WHERE (PUB_IN_RIGHT_TYPE > 0
AND PUC_DEPART_TYPE = 2
AND PUC_DEPART_ID1 = 1)
OR (PUB_OUT_RIGHT_TYPE > 0
AND PUC_DEPART_TYPE = 2
AND PUC_DEPART_ID1 != 1)
OR (PUB_IN_RIGHT_TYPE <= -10
AND PEOPLE_SET_TYPE = 2
AND PEOPLE_SET_ID1 = 1
AND REC_RIGHT_TYPE > 0)
OR (PUB_IN_RIGHT_TYPE <= -11
AND PEOPLE_SET_TYPE IS NULL )
xuejiecn 2009-09-22
  • 打赏
  • 举报
回复
把or换成几个union的形式或者(A or B or c)
换成not(not a and not b and not c)的形式
xuejiecn 2009-09-22
  • 打赏
  • 举报
回复
 把order by 放在查询的最外层,因为从结果来看,放在里面是没什么意义的,不能决定查出来的数据是哪些,和排序无关。

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧