Mysql SQL选择不同但详尽的列

Mysql SQL选择不同但详尽的列,mysql,sql,Mysql,Sql,我有一个包含两列的简单表: Col1 | Col2 -----+----- 1 | 3 1 | 4 2 | 3 2 | 4 ... many more rows 我想退回这个: Col1 | Col2 -----+----- 1 | 3 2 | 4 我不想要这个: Col1 | Col2 -----+----- 1 | 3 2 | 3 因为3在Col2中是重复的,而这个 Col1 | Col2 -----+----- 1 | 3 1

我有一个包含两列的简单表:

Col1 | Col2
-----+-----
1    | 3
1    | 4
2    | 3
2    | 4
... many more rows
我想退回这个:

Col1 | Col2
-----+-----
1    | 3
2    | 4
我不想要这个:

Col1 | Col2
-----+-----
1    | 3
2    | 3
因为3在Col2中是重复的,而这个

Col1 | Col2
-----+-----
1    | 3
1    | 4
Col1 | Col2
-----+----
1    | 3
因为1在Col1中是重复的,而这个

Col1 | Col2
-----+-----
1    | 3
1    | 4
Col1 | Col2
-----+----
1    | 3

因为现在Col2中缺少了4。换句话说,我不希望重复,但我也不希望忽略col2中的任何值(除非它与Col1中的重复一起出现,反之亦然)。我如何使用SQL来做我想做的事情?谢谢。

它根据您给定的样本数据工作

select col1,
case
when col1 =1 and col2 in (3,4) Then 3
when col1 =2 and col2 in (3,4) Then 4
end as col2
from table1
group by col1

有关更多详细信息,请访问此处

我认为您需要这样的查询:

SELECT Col1, Col2
FROM 
    (SELECT dt.*, @rownum1 := @rownum1 + 1 AS rn
     FROM 
        (SELECT Col1
         FROM t
         GROUP BY Col1) dt,
        (SELECT @rownum1 := 0) r) t1
    LEFT OUTER JOIN
    (SELECT dt.*, @rownum2 := @rownum2 + 1 AS rn
     FROM 
        (SELECT Col2
         FROM t
         GROUP BY Col2) dt,
        (SELECT @rownum2 := 0) r) t2
    ON t1.rn = t2.rn
UNION ALL
SELECT Col1, Col2
FROM 
    (SELECT dt.*, @rownum3 := @rownum3 + 1 AS rn
     FROM 
        (SELECT Col2
         FROM t
         GROUP BY Col2) dt,
        (SELECT @rownum3 := 0) r) t1
    LEFT OUTER JOIN
    (SELECT dt.*, @rownum4 := @rownum4 + 1 AS rn
     FROM 
        (SELECT Col1
         FROM t
         GROUP BY Col1) dt,
        (SELECT @rownum4 := 0) r) t2
WHERE (t2.Col1 IS NULL);
  • 您需要具有行号的
    Col1
    的不同值
  • 您还需要具有行号的
    Col2
    的不同值
  • 现在,您可以使用
    UNION ALL
    在行号上的那些不同值
    上设置一个
    完全外部联接

  • 请看这个:谢谢,但是这些解决方案都不起作用。如果
    col1
    1,1,2
    col2
    3,4,5
    省略其中一行和1(因为它是重复的),会发生什么情况。但是哪一行呢?你的要求模棱两可。