簡體   English   中英

選擇其中至少有兩個不同的對中出現一個的列對

[英]Selecting column pairs where one of the columns occurs in at least two distinct pairs

我希望從MySQL表中選擇一對不同的值,其中一列的值至少出現兩次。

例如,我有下表:

+----+---------+----------+-----------+
| id | machine | filename | ipaddress |
+----+---------+----------+-----------+
| 1  | X       | /tmp/1   | 1.2.3.4   |
| 2  | X       | /tmp/2   | 1.2.3.4   |
| 3  | X       | /tmp/3   | 2.3.4.5   |
| 4  | Y       | /tmp/4   | 2.3.4.5   |
| 5  | Z       | /tmp/5   | 2.3.4.5   |
| 6  | Z       | /tmp/6   | 2.3.4.5   |
+----+---------+----------+-----------+

我希望選擇至少兩台machine存在特定ipaddress所有行。 只需要一machine ipaddress -pair,因此結果將是:

+---------+-----------+
| machine | ipaddress |
+---------+-----------+
| X       | 2.3.4.5   |
| Y       | 2.3.4.5   |
| Z       | 2.3.4.5   |
+---------+-----------+

我嘗試在機器和ipaddress上分組:

SELECT machine, ipaddress FROM table 
GROUP BY machine, ipaddress HAVING count(*) > 1

但是,這也導致包含(X,1.2.3.4)。

我也嘗試使用子查詢,但這僅返回任何ipaddress一次:

SELECT machine, ipaddress FROM 
    (SELECT machine, ipaddress FROM table GROUP BY machine, ipaddress) t 
GROUP BY ipaddress HAVING count(*) > 1

我很難找到正確的查詢。 應當注意,該表相當大,並且在某種程度上需要有效的查詢。

目前我還沒有MySQL,但是我在SQL Server中嘗試了以下操作,它似乎可以解決您的問題。 確保編寫一些單元測試來驗證:

SELECT DISTINCT machine, ipaddress
FROM [table] t1
WHERE EXISTS (
 SELECT 1
   FROM [table] t2
  WHERE t1.ipaddress = t2.ipaddress
  GROUP BY ipaddress
 HAVING COUNT(DISTINCT machine) > 1);

這將產生您的數據:

+---------+-----------+
| machine | ipaddress |
+---------+-----------+
| X       | 2.3.4.5   |
| Y       | 2.3.4.5   |
| Z       | 2.3.4.5   |
+---------+-----------+

此替代語法也可以使用,並且對於MySQL可能(或可能不)更快(如果對您很重要,請進行性能測試):

SELECT DISTINCT machine, ipaddress
FROM [table]
WHERE ipaddress IN (
 SELECT ipaddress
   FROM [table]
  GROUP BY ipaddress
 HAVING COUNT(DISTINCT machine) > 1);

試試這個:

  SELECT machine, ipaddress FROM 
        (SELECT DISTINCT machine, ipaddress FROM table) t 
    GROUP BY ipaddress,machine HAVING count(*) > 1

暫無
暫無

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

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