[英]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.