mysql查询到唯一的列组合

hc2pp10m  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(294)

表-

TestID | IntegID
=======|======
P1     | In1
P2     | In2
P2     | In2
P3     | In3
P1     | In5
P1     | In5
P2     | In2
P3     | In3
P2     | In9

所需输出:

TestID | IntegID
=======|======
P1     | In1
P1     | In5
P2     | In2
P2     | In9

所以基本上我只想在列1和列2之间存在一对多关系时提取行。
像p3在第2列中只有一个对应的值,所以不应该提取它。但是,由于p1和p2在第2列中有多个值,因此提取了相关的行。
你能不能帮我在mysql里查询一下,把上面的输出提取出来。

9udxz4iz

9udxz4iz1#

可以在join中使用count(distinct integid)的子查询

SELECT DISTINCT my_table.TestId, my_table.IntegId
FROM my_table 
INNER JOIN (
  SELECT TestID, COUNT(DISTINCT IntegID) 
  FROM my_table
  GROUP BY TestId 
  HAVING COUNT(DISTINCT IntegID) > 1
) T ON T.TestID = my_table.TestID
pes8fvy9

pes8fvy92#

您可以将表连接到自身以获得不同的结果 IntegID 列,然后使用 DISTINCT 要删除重复行,请执行以下操作:

SELECT DISTINCT t1.TestID, t1.IntegID
FROM my_table t1
JOIN my_table t2 ON t2.TestID = t1.TestID AND t2.IntegID != t1.IntegID;

我认为上述方法可能是最简单的,将给你最好的性能,但我喜欢斯凯里奇的答案上面使用 COUNT(DISTINCT... 所以这里还有另一种方法 IN 只选择 TestID 您需要的行:

SELECT DISTINCT TestID, IntegID
FROM my_table
WHERE TestID IN
(
    SELECT TestID
    FROM my_table
    GROUP BY TestID
    HAVING COUNT(DISTINCT IntegID) > 1
)

有时,尝试一些方法,看看哪些方法最适合索引和应用程序的其他方面,这是很好的。干杯。

相关问题