仅显示mysql中两行之间的差异
如果(MySQL)审计表包含相似的行,是否可以只查看具有不同值的列 例如,一个包含四列的表,其中列仅显示mysql中两行之间的差异,mysql,Mysql,如果(MySQL)审计表包含相似的行,是否可以只查看具有不同值的列 例如,一个包含四列的表,其中列key是主键,列id是匹配行的标识符: key id col1 col2 1 123 B C 2 123 A C 3 456 B C 4 789 B A 5 789 B B 6 987 A C 密钥id col1 col2 公元前1123年 212
key
是主键,列id
是匹配行的标识符:
key id col1 col2
1 123 B C
2 123 A C
3 456 B C
4 789 B A
5 789 B B
6 987 A C
密钥id col1 col2
公元前1123年
2123 A C
公元前3456年
4789 B A
5789B
6987 A C
在上面的示例中,我需要查询只返回第1、2、4和5行,因为它们具有匹配的id,并且col1和col2中的值不同,即B、A和B、A
key id col1 col2
1 123 B
2 123 A
4 789 A
5 789 B
密钥id col1 col2
1123b
2123A
4789 A
5789 B
我知道这可能不是一个非常有效的解决方案,但它提供了您想要的。试试这个:
SELECT A.ID, (CASE A.col1 WHEN B.col1 THEN NULL ELSE B.col1 END), (CASE A.col2 WHEN B.col2 THEN NULL ELSE B.col2 END) FROM tblName A
FULL OUTER JOIN tblName B
ON
A.ID=B.ID
WHERE
(A.col1=B.col1 AND A.Col2<>B.Col2)
OR
(A.col2<>B.col2 AND A.Col1=B.Col1)
从tblName A中选择A.ID,(当B.col1为案例A.col1时,则为NULL,否则B.col1结束),(当B.col2为案例A.col2时,则为NULL,否则B.col2结束)
完全外部连接tblName B
在…上
A.ID=B.ID
哪里
(A.col1=B.col1和A.Col2B.Col2)
或
(A.col2B.col2和A.Col1=B.Col1)
内部联接应该给出相同的结果这有点做作,因为添加更多的行将给出非常不同的结果-但无论如何
SELECT x.my_key
, x.id
, IF(y.col1=x.col1,'',x.col1) col1
, IF(y.col2=x.col2,'',x.col2) col2
FROM my_table x
JOIN my_table y
ON y.id = x.id
AND y.my_key <> x.my_key
WHERE (y.col1 <> x.col1 OR y.col2 <> x.col2)
ORDER
BY my_key;
选择x.my_键
,x.id
,如果(y.col1=x.col1',,x.col1)col1
,如果(y.col2=x.col2',,x.col2)col2
从我的表x
加入我的桌子
在y.id=x.id上
还有y,我的钥匙x,我的钥匙
其中(y.col1 x.col1或y.col2 x.col2)
命令
用我的钥匙;
感谢所有指导我的回复。
根据您的建议,我创建了如下sql:
SELECT
T1.KEY,
T1.ID,
CASE T2.COL1_DISTINCT_VALUES WHEN 1 THEN NULL ELSE T1.COL1 END AS COL1,
CASE T2.COL2_DISTINCT_VALUES WHEN 1 THEN NULL ELSE T1.COL2 END AS COL2
FROM
TAB1 T1
INNER JOIN
(
SELECT
ID,
COUNT(DISTINCT COL1) AS COL1_DISTINCT_VALUES,
COUNT(DISTINCT COL2) AS COL2_DISTINCT_VALUES
FROM
TAB1
GROUP BY
ID
) T2
ON T1.ID=T2.ID
WHERE
T2.COL1_DISTINCT_VALUES > 1
OR T2.COL2_DISTINCT_VALUES > 1
ORDER BY
KEY,ID;