【问题标题】:Oracle GROUP BY doesn't work as expectedOracle GROUP BY 无法按预期工作
【发布时间】:2016-05-29 20:48:57
【问题描述】:

我得到这样的 SQL 查询:

SELECT Z.ID,
       Z.ZADAVATEL,
       Z.DATUM_ZADANI,
       Z.LIN_OBL,
       Z.DRUH_ZMENY,
       Z.CISLO_ZMENY,
       Z.PRILOHY
FROM   ZMENY Z
       JOIN ZMENY_DILY ZD
       ON (ZD.ID_ZMENY=Z.ID)
WHERE  1=1 %sql
ORDER BY Z.ID DESC %lmt%ofs

表 ZMENY 有 9 行,ZMENY_DILY 有 11 行。问题是我得到 11 行,但其中 2 行是重复行,我试图摆脱这两个重复行,我尝试使用

GROUP BY Z.ID

不幸的是,Oracle 说:ORA-00979:不是 GROUP BY 表达式

我不太喜欢 Oracle,我猜 MySQL 不会有任何问题......有什么提示吗?

【问题讨论】:

  • 首先,您应该确定这两个额外的行代表什么。假设ZMENY 的每个条目在ZMENY_DILY 中都有一个匹配的行,并且两个条目有一个额外的行——这些额外的行是什么意思?回答这个问题,我相信你的问题的答案会立刻浮现出来。

标签: php sql oracle


【解决方案1】:

在这种情况下你不需要 group by 你可以使用 select distinct

SELECT distinct  
    Z.ID, 
    Z.ZADAVATEL, 
    Z.DATUM_ZADANI,
    Z.LIN_OBL,
    Z.DRUH_ZMENY,
    Z.CISLO_ZMENY,
    Z.PRILOHY 
FROM ZMENY Z JOIN ZMENY_DILY ZD ON (ZD.ID_ZMENY=Z.ID)
ORDER BY Z.ID DESC %lmt%ofs

【讨论】:

  • 使用 DISTINCT 抛出此错误:ORA-00932: 不一致的数据类型:预期 - 得到 CLOB
  • 您不能将 CLOB 放在 WHERE 子句中。确保您在 where 中没有 cblog。
  • 是的,问题出在 SELECT ... 我必须在 CLOB 列上使用函数 to_char :) 谢谢!!
【解决方案2】:

您可以使用select distinct,假设所有列都是重复的:

SELECT DISTINCT Z.ID, Z.ZADAVATEL, Z.DATUM_ZADANI, Z.LIN_OBL,
       Z.DRUH_ZMENY, Z.CISLO_ZMENY, Z.PRILOHY
FROM ZMENY Z JOIN
     ZMENY_DILY ZD
     ON ZD.ID_ZMENY = Z.ID
WHERE  1=1 -- %sql ???
ORDER BY Z.ID DESC;

或者,您可以使用IN

SELECT z.*
FROM ZMENY Z
WHERE Z.ID IN (SELECT ID_ZMENY FROM ZMENY_DILY ZD)
ORDER BY Z.ID DESC;

【讨论】:

  • 使用 DISTINCT 抛出这个:ORA-00932:不一致的数据类型:预期 - 得到 CLOB .... IN 子句返回相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 2017-09-02
  • 2021-09-06
  • 1970-01-01
  • 2017-02-15
  • 2020-01-08
  • 2015-09-18
相关资源
最近更新 更多