簡體   English   中英

MySQL查詢到列的唯一組合

[英]MySQL query to unique combination of columns

表-

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列中只有1個對應值一樣,因此不應提取它。 但是,由於P1和P2在第2列中具有多個值,因此提取了相關的行。

您能幫我在MySql中進行查詢以提取上述輸出嗎?

您可以在連接中使用帶有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 

您可以將表連接到自身以獲取不同的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... scaisEdge的答案,因此這是另一種使用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
)

有時候嘗試一些方法,看看哪種方法最適合您的索引和應用程序的其他方面,這是很好的。 干杯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM