2014-09-15 5 views
0

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

Я исторически работает:

USE hg19; 
SELECT DISTINCT (name2), txStart, txEnd 
FROM refGene 
WHERE name2 LIKE '[genename]'; 

, который будет выводить все записи и это было прекрасно, за исключением того, если бы я искал запись, не существовало, я хотел бы получить пустой (который только таким образом, оказался тот же результат, если я отключен от сервера). Это привело к возникновению проблем, связанных с нисходящим потоком, когда я не мог обнаружить, что запись не существует, а мой интернет отключил меня.

Так вместо этого я решил попробовать:

USE hg19; 
SELECT *, count(*) AS results 
FROM (
    SELECT DISTINCT (name2), txStart, txEnd 
    FROM refGene 
    WHERE name2 LIKE 'TP53' 
) a; 

Это теперь дают мне 0 результатов, если она не существует (а если он не подключен, было бы оставаться пустым). Однако теперь по какой-либо причине он отображает только одну запись независимо от того, что (если я запрашиваю TP53, например, он должен иметь две разные записи -> однако он даст мне результаты: 2, но отобразит только один из них). Есть ли способ обойти это? Я все равно хотел бы, чтобы он показывал все отличные результаты.

ответ

1

COUNT() - это совокупная функция, которая работает с группами строк. Без предложения GROUP BY только MySQL принимает такой оператор и возвращает произвольные значения в не агрегированных столбцах - и возвращает только одну строку, как вы видели.

Чтобы получить желаемый результат, вы только должны перевернуть вашу логику и использовать LEFT JOIN

SELECT 
    a.results, 
    b.* 
FROM 
    (SELECT COUNT(*) results FROM refGene r1 WHERE a.name2 LIKE 'TP53') a 
LEFT JOIN (
    SELECT 
     * 
    FROM 
     refGene r2 
    WHERE 
     name2 LIKE 'TP53' 
) b 
ON 
    a.result IS NOT NULL; 

Если ваш «основной» запрос не возвращает строки, будет 0 (ноль) в результате столбец значения NULL в столбцах вашего «основного» запроса.

+0

Привет, Спасибо, Это исправлено, если запись существует, но она возвращается к исходной проблеме, где, если я запускаю запрос и запись не существует, я не получаю предупреждения о том, что она не существует (она выиграла 't отображает результат 0, на что я надеялся) – user3412393

+0

@ user3412393. Я так и не заметил этого. Кажется, нам нужен LEFT JOIN, см. Мое редактирование. – VMai