text 数据类型不能选为 DISTINCT,因为它不可比

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了text 数据类型不能选为 DISTINCT,因为它不可比相关的知识,希望对你有一定的参考价值。

语句没有问题啊 是什么地方的事
select * from CRM_CALLBACK_TASK_1
where
sdate between '2012-5-15 10:10:33' and '2012-5-15 10:20:33'
union select * from CRM_CALLBACK_TASK_2
where
sdate between '20120801 10:00' and '20120801 10:05'

你的表中应该有某一项是text数据类型,text数据类型是不能使用distinct的,union带有distinct的功能,所以报错 参考技术A 把类型text的属性改成nvarchar 的就行了

SQLite group_concat 返回相同数据的多个实例,不能使用 DISTINCT

【中文标题】SQLite group_concat 返回相同数据的多个实例,不能使用 DISTINCT【英文标题】:SQLite group_concat returns many instances of the same data, can't use DISTINCT 【发布时间】:2021-12-21 20:26:01 【问题描述】:

我正在尝试使用 JOIN 和 group_concat 从 4 个表中返回数据

这是我当前的查询:

SELECT  m.ID AS num
    , m.Name AS MOVIE
    , group_concat(v.Codec, '-') AS v_CODEC
    , group_concat(a.Codec, '-') AS a_CODEC
    , group_concat(s.Language, '-') AS SUBs
FROM File AS m
LEFT JOIN Video AS v ON m.ID = v.FileID
LEFT JOIN Audio AS a ON m.ID = a.FileID
LEFT JOIN Subtitle AS s ON m.ID = s.FileID
GROUP BY m.ID
ORDER BY m.ID

使用我当前的查询,我的结果如下所示:

+-----+----------+----------------+-------------+----------+
| num |   MOVIE  |     v_CODEC    |   a_CODEC   |   SUBs   |
+-----+----------+----------------+-------------+----------+
| 1   | Superman | H264-H264-H264 | DTS-DTS-DTS | en-en-en |
|     |          | H264-H264-H264 | DTS-DTS-DTS | en-en-en |
+-----+----------+----------------+-------------+----------+
| 2   | Batman   | MPEG2-MPEG2    | MP3-MP3     |          |
+-----+----------+----------------+-------------+----------+

我希望我的结果如下所示:

+-----+----------+---------+-------------+-------+
| num |   MOVIE  | v_CODEC |   a_CODEC   |  SUBs |
+-----+----------+---------+-------------+-------+
| 1   | Superman | H264    | DTS-DTS-DTS | en-en |
+-----+----------+---------+-------------+-------+
| 2   | Batman   | MPEG2   | MP3-MP3     |       |
+-----+----------+---------+-------------+-------+

这是我的数据库结构:

File
+----+----------+
| ID |   Name   |
+----+----------+
| 1  | Superman |
+----+----------+
| 2  | Batman   |
+----+----------+

Video
+--------+-------+
| FileID | Codec |
+--------+-------+
| 1      | H264  |
+--------+-------+
| 2      | MPEG2 |
+--------+-------+

Audio
+--------+-------+
| FileID | Codec |
+--------+-------+
| 1      | DTS   |
+--------+-------+
| 1      | DTS   |
+--------+-------+
| 1      | DTS   |
+--------+-------+
| 2      | MP3   |
+--------+-------+
| 2      | MP3   |
+--------+-------+

Subtitle
+--------+----------+
| FileID | Language |
+--------+----------+
| 1      | en       |
+--------+----------+
| 1      | en       |
+--------+----------+

如何使我的查询达到我的需要?

提前感谢您的帮助。

【问题讨论】:

With my current query, my results look like this ...我怀疑您当前的结果是否真的像这样,每个单元格有多个值。请包括真实的实际电流输出。 我在帖子中附上了一张我的真实实际电流输出的图片。 请use text, not images/links, for text--including tables & ERDs。 PS你没有用语言说你的输出是输入的函数。 【参考方案1】:

我相信以下是你想要的:-

SELECT 
    m.ID AS num, 
    m.name AS movie, 
    (SELECT group_concat(codec,'-') FROM Video WHERE FileID = m.ID) AS v_codec, 
    (SELECT group_concat(codec,'-') FROM Audio WHERE FileID = m.ID) AS a_codec,
    (SELECT group_concat(Language,'-') FROM Subtitle WHERE FileID = m.ID) AS SUBs
FROM File AS m ORDER BY m.id;

产生:-

这不是将提取物基于笛卡尔积,在没有分组的情况下,就像这样:-

答案是 group_concat 只在关系上

【讨论】:

请use text, not images/links, for text--including tables & ERDs。 阅读链接中的答案。 @MikeT 是的,这正是我想要的。非常感谢您的友好解释和帮助。

以上是关于text 数据类型不能选为 DISTINCT,因为它不可比的主要内容,如果未能解决你的问题,请参考以下文章

关于SQL的distinct 用法

如何解决 不能以 DISTINCT 方式选择 textntext 或 image 数据类型

SQLServer中如何获取没有重复的记录,记录中字段有text,或image数据类型

MySQL - GROUP_CONCAT 返回重复数据,不能使用 DISTINCT

数据库中count(all 表达式)函数怎麽用啊

参数 'text', 'onPressed', 'outlineBtn' 不能有值 'null' 因为它的类型,但是隐含的默认值是 'null'