如何从几个相同的值中获取一个值?
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
我怎样才能获得(使用mysql
或Knex.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,这样它们就不会首先出现?”
【讨论】:
以上是关于如何从几个相同的值中获取一个值?的主要内容,如果未能解决你的问题,请参考以下文章
【求助】Dom4j 生成xml,节点增加属性时,属性值中有特殊字符,如何做到不转义