MYSQL - 显示查询结果计数而不会丢失实际结果条目

时间:2014-09-15 18:14:47

标签: mysql syntax

很抱歉,如果这是一个非常愚蠢的问题,但我对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 个答案:

答案 0 :(得分: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(零),在" main"的列中有一个NULL值查询。