【发布时间】:2014-10-06 22:51:00
【问题描述】:
我想创建一个存储多个字符串的变量,但我尝试过的任何方法似乎都不起作用。我有一个代码块(如下),如果我明确写出三个字符串,它就可以工作,但当我传递一个变量(我称之为@a)时,我认为它应该存储相同的确切字符串:
这是有问题的代码块供参考,当我写出 3 个字符串('ENSG00000120860'、'ENSG00000197894'、'ENSG00000273425')时,这就是我想要的:
SELECT
ensp2, COUNT(DISTINCT (ensembl_gene_id))
FROM
(SELECT
s . *, g.ensembl_gene_id, g.associated_gene_name
FROM
blang.string s
JOIN natashal.ensp_to_ensg_and_gene_symbol g ON g.ensembl_protein_id = s.ensp1
ORDER BY ensembl_gene_id) x
WHERE
ensembl_gene_id IN ('ENSG00000120860','ENSG00000197894','ENSG00000273425')
GROUP BY ensp2
ORDER BY COUNT(DISTINCT (ensembl_gene_id)) DESC
但是,我想将 ('ENSG00000120860','ENSG00000197894','ENSG00000273425') 设置为一个变量,因为它们会发生变化。我不是手动输入这些,而是从我得到的一列结果中列出它们。我试着这样做:
set @a = (SELECT GROUP_CONCAT(QUOTE(ensembl_gene_id) SEPARATOR ',')
FROM (SELECT DISTINCT(ensembl_gene_id) FROM natashal.ensp_to_ensg_and_gene_symbol ORDER BY RAND() LIMIT 8) x)
困难在于@a 看起来应该很好地存储我的 3 个字符串,但没有这样做:
SELECT @a
>'ENSG00000120860','ENSG00000197894','ENSG00000273425'
我什至可以像这样在它周围加上括号:
SELECT CONCAT('(',@a,')')
>('ENSG00000120860','ENSG00000197894','ENSG00000273425')
这看起来可行,但是当我尝试将此引用传递给上面的代码块时,如下所示:
SELECT
ensp2, COUNT(DISTINCT (ensembl_gene_id))
FROM
(SELECT
s . *, g.ensembl_gene_id, g.associated_gene_name
FROM
blang.string s
JOIN natashal.ensp_to_ensg_and_gene_symbol g ON g.ensembl_protein_id = s.ensp1
ORDER BY ensembl_gene_id) x
WHERE
ensembl_gene_id IN (SELECT @a)
GROUP BY ensp2
ORDER BY COUNT(DISTINCT (ensembl_gene_id)) DESC
我没有得到我想要的结果,没有返回任何内容(也没有返回错误消息)。 MySQL 似乎认为它是一个空数组,或者它可能无法将字符串与表中的值匹配?
提前致谢,我们将不胜感激。
【问题讨论】:
标签: mysql variables join where-in