Mysql SELECT并返回多行,但当存在时,更喜欢一个列值而不是另一个列值

时间:2011-06-14 07:48:26

标签: mysql sql

所以我正在编写一个MySQL查询,它将返回一个结果集,当某个特定列具有特定的行值时,它将返回该行而不是另一个接近重复的行,否则返回结果,就像正常一样。 / p>

好的,这是我的表

id   name    value   another

1    name1   value1  
2    name1   value1  foo
3    name2   value2  
4    name3   value3  

并且结果应该是(如果存在foo):

id   name    value   another

2    name1   value1  foo
3    name2   value2  
4    name3   value3  

我确实找到了这个例子:MySQL get rows but prefer one column value over another但是无法弄清楚如何根据我的需要调整它......

我希望我有意义!两天不睡觉对于解释的尝试是不利的!另外我很抱歉,如果已经被问到这个问题,我搜索了很长时间,但是没有词汇量可以找到任何结果......

提前致谢!

3 个答案:

答案 0 :(得分:2)

SELECT
  a.*
FROM atable a
  LEFT JOIN atable b ON a.name = b.name AND a.another = 'foo'

答案 1 :(得分:1)

这将过滤掉空another的行,其中存在具有相同namevalue且具有another的条目。

select  *
from    YourTable yt1
where   not exists 
        (
        select  *
        from    YourTable yt2
        where   yt1.id <> yt2.id
                and yt1.name = yt2.pname
                and yt1.value = yt2.value
                and yt1.another = ''
                and yt2.another <> ''
        )

答案 2 :(得分:1)

这听起来像mysql coalesce函数会很方便。

Coalesce返回它给出的第一个非null参数。所以你可以使用,

SELECT id, COALESCE(another, value) FROM MyTable;

这将返回两列,id字段和“another”列的内容(如果它不为null)或“value”列的内容。