我的查询构建存在问题......
我有一个表,其中包含行:name,start,end,ref,alt,patientNo。 示例数据如下所示:
chr1, 10, 10, A, B, 9999;
chr1, 12, 12, B, A, 9999;
chr1, 18, 18, A, B, 9999;
chr1, 29, 29, C, B, 9999;
chr1, 10, 10, A, A, 8888;
chr1, 12, 12, A, B, 8888;
chr2, 18, 18, D, C, 8888;
chr2, 29, 29, A, B, 8888;
结束......
我需要构建一个查询,比较彼此之间的患者。 即: if(患者9999的chr1,start,end,alt)=(患者8888的chr1,start,end,alt) 回来......
任何想法如何建立这样的查询? 感谢
好的,我还有问题。 我有10个CSV文件,其中包含患者的基因组数据。 每个文件包含大约70000行。 我将CSV文件中的数据放入MySQL数据库(因此我的数据库包含一个包含700000行的表)。
现在我需要过滤这些数据。有很多列,例如:
名称(varchar),开始(int),结束(int),参考(varchar), alt (varchar), patientNo (varchar)。
一个示例声明:SELECT name, start, end, ref, alt, patientNo FROM mytable
;返回以下数据:
chr1, 10, 10, A, C, 9999;
chr1, 12, 12, T, T, 9999;
chr2, 18, 18, A, T, 9999;
chr2, 29, 29, C, C, 9999;
chr3, 10, 10, A, G, 9999;
chr3, 12, 12, A, C, 9999;
chr1, 18, 18, G, C, 8888;
chr2, 29, 29, A, G, 8888;
chr2, 10, 10, A, G, 8888;
chr3, 12, 12, G, A, 8888;
chr1, 18, 18, A, G, 666z;
chr2, 29, 29, C, G, 666z;
chr3, 10, 10, A, A, 666z;
chr4, 12, 12, A, G, 666z;
chr5, 18, 18, T, C, 666z;
chr1, 29, 29, A, G, 44a4;
chr1, 10, 10, A, G, 44a4;
chr2, 12, 12, G, A, 44a4;
chr2, 18, 18, A, G, 44a4;
chr1, 29, 29, C, G, 3333;
chr1, 10, 10, A, A, 3333;
chr1, 12, 12, A, G, 3333;
chr1, 18, 18, T, C, 3333;
chr2, 29, 29, A, G, 3333;
我需要在 alt 列中提取具有唯一字母的行,在名称和开始位置, alt 信,这对患者来说是独一无二的。 如果我加入专栏
SELECT p1.name, p1.start, p1.alt, p2.alt, p3.alt, p4.alt, p5.alt
FROM mytable p1, mytable p2, mytable p3, mytable p4, mytable p5
WHERE ( p1.patientNo = "9999" and p2.patientNo = "8888" and
p3.patientNo = "666z" and p4.patientNo = "44a4" and
p5.patientNo = "3333") ;
我考虑结果,例如:
chr1 10 A A A A A
chr1 13 G G G G G
chr2 17 A A G A A
chr2 19 A A G G A
chr3 38 A C A T T
这意味着:
最后,上面示例的结果应如下所示:
chr2, 17, G, 666z
chr3, 19, C, 8888
是否可以构造一个查询,从原始表中返回这样的结果?
答案 0 :(得分:0)
SELECT a.name, a.start, a.end, a.alt, a.patientNo,
b.name, b.start, b.end, b.alt, b.patientNo
FROM patient AS a, patient AS b
WHERE a.name = b.name
AND a.start = b.start
AND a.end = b.end
AND a.alt = b.alt
AND a.patientNo < b.patientNo
ORDER by a.name
使用以下表格:
SELECT <Columns> FROM <Table(s)> WHERE <Condition> ORDER BY <Columns>
答案 1 :(得分:0)
没试过,但请看:
SELECT p1.*, p2.* FROM tablePatients p1, tablePatients p2 WHERE p1.chr1 = p2.chr1 AND p1.start = p1.start AND p1.end = p2.end AND p1.ref = p2.ref AND p1.alt = p2.alt