有点奇怪,我想编写一个 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/