很抱歉,如果这是一个非常愚蠢的问题,但我对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但只显示其中一个)。有没有解决的办法?我仍然想让它显示所有不同的结果。
答案 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值查询。