Mysql SELECT и возвращает несколько строк, но предпочитает одно значение столбца над другим, когда присутствует - PullRequest
1 голос
/ 14 июня 2011

Так что я хочу написать запрос MySQL, который будет возвращать набор результатов, который, когда конкретный столбец имеет определенное значение строки, будет возвращать эту строку вместо другой близкой к повторяющейся строке, но в противном случае возвращает результаты, как обычно. 1001 *

Хорошо, вот мой стол

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 получает строки, но предпочитает одно значение столбца другому , но не может понять, как адаптировать его к моим потребностям ...

Надеюсь, у меня есть смысл! Нет сна в течение двух дней не годятся для попыток выяснения! Также мне очень жаль, если об этом уже спрашивали, я долго искал, но у меня просто не было словарного запаса, чтобы найти какие-либо результаты ...

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 18 марта 2012
SELECT
  a.*
FROM atable a
  LEFT JOIN atable b ON a.name = b.name AND a.another = 'foo'
1 голос
/ 15 июня 2011

Это похоже на ситуацию, в которой функция mysql coalesce будет полезна.

Coalesce возвращает первый заданный ненулевой параметр.Таким образом, вы можете использовать

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

, чтобы получить два столбца, поле id и либо содержимое «другого» столбца (если оно не равно нулю), либо содержимое столбца «значение».

1 голос
/ 14 июня 2011

Это отфильтрует строки с пустым 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 <> ''
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...