sql - MySQL 获取行但更喜欢一个列值而不是另一个

标签 sql mysql

有点奇怪,我想编写一个 MySQL 查询,它将从表中获取结果,但更喜欢列的一个值而不是另一个,即

id   name    value   prioirty
1    name1   value1  NULL
2    name1   value1  1
3    name2   value2  NULL
4    name3   value3  NULL

所以这里 name1 有两个条目,但其中一个的优先级为 1。我想从表中获取所有值,但更喜欢具有我所追求的优先级的值。

我想要的结果是

id   name    value   prioirty
2    name1   value1  1
3    name2   value2  NULL
4    name3   value3  NULL

一种等效的说法是“从表中获取所有行,但更喜欢优先级为 x 的行”。

最佳答案

应该这样做:

SELECT
     T1.id,
     T1.name,
     T1.value,
     T1.priority
FROM
     My_Table T1
LEFT OUTER JOIN My_Table T2 ON
     T2.name = T1.name AND
     T2.priority > COALESCE(T1.priority, -1)
WHERE
     T2.id IS NULL

这还允许您拥有多个优先级,最高优先级是您要返回的优先级(如果您有 1 和 2,则返回 2)。

我还要说的是,数据库中似乎确实存在一些设计问题。我的方法是:

My_Table (id, name) My_Values (id, priority, value) 在 id 到 id 上有一个 FK。 My_Table 中的 id 和 My_Values 中的 id,priority 的 PK。当然,我也会使用适当的表名。

关于sql - MySQL 获取行但更喜欢一个列值而不是另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1848693/

相关文章:

SQL:查找列值匹配的行之间的差异

mysql - 导致双行的原因以及受代码约束时如何修复

php/mysql 返回空集

sql - 我将如何在 mysql 查询中检索父类别?

mysql select 和 join 非常慢

mysql - Rails JSON API : limit has_many relationship to current_user

java - 选择然后更新 RESULTSET 中的所有行

mysql - MAMP Pro 5.1.1-退出时终止MySQL

sql - 当查询包含多个 JOIN 时,Access SQL 语法错误(缺少运算符)

java - JPA,三个实体,它们的关系。 ¿CascadeType 是否正确删除?