所以我正在编写一个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但是无法弄清楚如何根据我的需要调整它......
我希望我有意义!两天不睡觉对于解释的尝试是不利的!另外我很抱歉,如果已经被问到这个问题,我搜索了很长时间,但是没有词汇量可以找到任何结果......
提前致谢!
答案 0 :(得分:2)
SELECT
a.*
FROM atable a
LEFT JOIN atable b ON a.name = b.name AND a.another = 'foo'
答案 1 :(得分:1)
这将过滤掉空another
的行,其中存在具有相同name
和value
且具有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”列的内容。