Mysql 比较同一表格上两次选择的结果

Mysql 比较同一表格上两次选择的结果,mysql,select,subquery,Mysql,Select,Subquery,假设我有一张桌子,mytable,如下所示: sampleID rs A1 A2 -------------------------------- 1001 rs123 A C 1001 rs124 T C 1001 rs125 A T 1001 rs126 A C 1002 rs122 A C 1002 rs

假设我有一张桌子,mytable,如下所示:

sampleID   rs         A1    A2
--------------------------------
1001       rs123      A     C
1001       rs124      T     C
1001       rs125      A     T
1001       rs126      A     C
1002       rs122      A     C
1002       rs123      T     C
1002       rs124      T     C
1002       rs125      A     C
我想比较任意两个样本ID,它们有一个共同的rs值,看看它们的A1和/或A2值是否匹配

例如,以

SELECT sampleID as Sample1, rs as rs1, A1 as A1_1, A2 as A2_1 FROM mytable where sampleID = "1001"  

SELECT sampleID as Sample2, rs as rs2, A1 as A1_2, A2 as A2_2 FROM mytable where sampleID = "1002" 

如何编写一个SELECT语句,获取上面每个SELECT的结果,在rs1=rs2处联接,并将A1_1与A1_2和A2_1与A2_2进行比较?

我将在这里用作自联接,以处理比较:

SELECT
    t1.sampleID,
    t2.sampleID,
    t1.rs,
    t1.A1,
    t2.A1,
    (t1.A1 = t2.A1) AS A1_comp,
    t1.A2,
    t2.A2,
    (t1.A2 = t2.A2) AS A2_comp
FROM mytable t1
INNER JOIN mytable t2
    ON t1.sampleID < t2.sampleID
WHERE
    t1.rs = t2.rs
ORDER BY
    t1.sampleID,
    t2.sampleID,
    t1.rs;
选择
t1.样本,
t2.样本,
t1.rs,
t1.A1,
t2.A1,
(t1.A1=t2.A1)作为A1_comp,
t1.A2,
t2.A2,
(t1.A2=t2.A2)作为A2_comp
来自MyTableT1
内部联接表t2
关于t1.sampleID


联接条件要求联接左侧的
sampleID
严格小于右侧的。这确保了我们不会重复比较,也不会将同一样本与自身进行比较。我们利用MySQL的语法允许为
A1
A2
值选择布尔等式。别名
A1_comp
A1_comp
对于不匹配项将为0,对于匹配项将为1。

为了完整性,我希望包含之前发布的答案的稍微修改版本。在此版本中,根据WHERE子句,仅显示不匹配的A1/A2列

SELECT 
A.rs1 as rs, A.Sample1_A1, A.Sample1_A2, B.Sample2_A1, B.Sample2_A2  
    from
    (
    SELECT sampleID as Sample1, rs as rs1, A1 as Sample1_A1, A2 as Sample1_A2 
    FROM mytable where sampleID = "1001" 
    )A left join
    ( 
    SELECT sampleID as Sample2, rs as rs2, A1 as Sample2_A1, A2 as Sample2_A2 
    FROM mytable where sampleID = "1002" 
    )B on A.rs1=B.rs2

where A.Sample1_A1 != B.Sample2_A1 or A.Sample1_A2 != B.Sample2_A2

这是你自己说的。尝试通过提供
相同的表别名来连接。从mytable t1中选择t1.samleid作为samp1,t2.sampleid作为samp2。rs=t2.rs2,其中….