代码之家  ›  专栏  ›  技术社区  ›  Cogsy

“选择具有不同BLOB的列”

  •  3
  • Cogsy  · 技术社区  · 15 年前

    SELECT DISTINCT i FROM Table i JOIN i.other o
    

    很快就失败了:

    “内部异常:java.sql.sql异常:类型为“BLOB”的列不能用于CREATE INDEX、ORDER BY、GROUP BY、UNION、INTERSECT、EXCEPT或DISTINCT语句,因为该类型不支持比较。”

    4 回复  |  直到 12 年前
        1
  •  3
  •   DanSingerman    15 年前

    您可以将blob对象的哈希或校验和存储在另一列中,并对其使用distinct运算符。

    例子:

    SELECT i from Table  WHERE id IN (
      SELECT id FROM (
        SELECT MIN(id) AS id, hash_of_i FROM Table GROUP BY hash_of_i
                     ) t
                                    )
    

    我相信您可以更优雅地编写这个SQL,但它会给您一个想法。

    编辑-刚刚意识到,使用这个可以完全免除Distinct操作符(它在功能上等同于删除它)。

    编辑2-我不确定我的第一个版本是否有效,所以已经重写了它

        2
  •  2
  •   Cogsy    15 年前

    赫尔曼德的一些灵感让我想到了这个可行的解决方案:

    SELECT i FROM Table i WHERE EXISTS (
        SELECT e FROM Table e JOIN e.other o WHERE e.id=i.id
    )
    
        3
  •  0
  •   Boris Pavlović    15 年前

    BLOB类型列中的值只是指向实际数据存储的指针。为了应用这些运算符中的任何一个,您需要从BLOB加载数据并实现自己的逻辑,因为数据可以表示任何东西(图像、文本…)

        4
  •  0
  •   Alireza Hanifi    9 年前

    使用setResultTransformer(Criteria.DISTINCT_ROOT_实体)而不是查询上的distinct。