如何从几个相同的值中获取一个值?

Posted

技术标签:

【中文标题】如何从几个相同的值中获取一个值?【英文标题】:How to get one value from several identical ones? 【发布时间】:2021-08-10 05:51:50 【问题描述】:

例如,我的数据库中有这样的记录:

product_id
------------------------------------
887349c7-699e-4792-adde-3a44acd2d768
887349c7-699e-4792-adde-3a44acd2d768
887349c7-699e-4792-adde-3a44acd2d768
ecdcf200-6bc0-4b67-b47a-5946a1ab1dcf
ecdcf200-6bc0-4b67-b47a-5946a1ab1dcf
01a5419d-aaf8-4524-99ce-9bf5c1836823
01a5419d-aaf8-4524-99ce-9bf5c1836823

我怎样才能获得(使用mysqlKnex.js 语法)每个product_id,但只有1 个,因为我有副本(没关系,必须这样):

product_id
------------------------------------
887349c7-699e-4792-adde-3a44acd2d768
ecdcf200-6bc0-4b67-b47a-5946a1ab1dcf
01a5419d-aaf8-4524-99ce-9bf5c1836823

【问题讨论】:

只需使用DISTINCT关键字 是的,谢谢,它有效! 【参考方案1】:

SELECT DISTINCT 语句用于仅返回不同(不同)的值。

在表中,一列通常包含许多重复值;有时您只想列出不同的(不同的)值。

SELECT DISTINCT product_id
FROM YourTable;

【讨论】:

还有一个问题,如果我在product_id 中也有NULL,但需要所有记录(也需要NULL)怎么办。我用count()函数查了一下,好像没有用NULL统计记录 使用两个查询并将它们与UNION 结合起来。一个应该使用DISTINCT 返回所有非空值,另一个应该返回所有空值。 是的。因为 COUNT() 不能计算空值。你想数一数你有多少NULL吗? 其实我总是有NULL的记录,所以,如果我有5条记录,其中1条总是NULL 你可以用这个查询计算 Null:select count(coalesce(YOURCOLUMN, 'bingo')) NVALUES from YOURTABLE where coalesce(YOURCOLUMN, 'bingo') = 'bingo' group by YOURCOLUMN【参考方案2】:

另一种方法是按列分组

SELECT column
FROM table
GROUP BY column 

如果您因为连接到具有多行这一行的表而获得这些重复,则最好使用任何可能的方法来减少要连接的数据量,而不是生成大量重复和然后不得不投入资源来压扁它们

例如,如果您有一个人加入到地址,并且地址保留了该人居住过的任何地方的历史记录,当前地址由一个为空的 leave_date 给出(一个人只有一个活动地址),它会更好的做法:

SELECT person.* 
FROM person JOIN address ON ...
WHERE address.leave_date IS NULL

比做

SELECT DISTINCT person.*
FROM person JOIN address ON ...

简而言之,您对“我的天啊,我得到了重复”的回答不应该总是“只是在里面撞一个不同的东西来摆脱它们”,而应该是“它们为什么会出现,有没有办法例如将 1:M 连接减少到 1:1,这样它们就不会首先出现?”

【讨论】:

以上是关于如何从几个相同的值中获取一个值?的主要内容,如果未能解决你的问题,请参考以下文章

无法从 PHP URL 重写生成的值中获取值

json 的值如果有逗号怎么办

从一系列值中获取一系列范围

【求助】Dom4j 生成xml,节点增加属性时,属性值中有特殊字符,如何做到不转义

如何在 Python 中直接获取字典键作为变量(而不是通过从值中搜索)?

JQuery如何判断值中是不是包含某个值?