2017-08-08 85 views
1

在我的數據庫,我有3個領域:SQL查詢等領域不同的領域

property_id 
e_id 
name 

我需要知道registers具有相同property_id和名稱,但不同e_id

+2

什麼是寄存器? –

+0

@TabAlleman我猜三列共同描述了一個註冊表。 –

+0

e_id是主鍵,我不明白... – canmenev

回答

-1

您可以通過子句中使用組在這裏 您的查詢就會

select property_id, e_id , name from your_table groupby e_id 
+1

測試一下http://rextester.com/XCOUD86115你會發現這不會返回正確的結果。也許你正試圖依靠擴展的mySQL組。但沒有在你的回答中說明這很難說。 – xQbert

+0

是的,xQbert是對的! –

3

聚集在性質和名稱,然後計算不同e_id值的數量:

SELECT property_id, name 
FROM yourTable 
GROUP BY property_id, name 
HAVING COUNT(DISTINCT e_id) > 1 

注意,如果property_id是一個唯一確定名稱的主鍵,然後我們可以單獨聚合。

+0

您在羣組中遺漏了'name',但我打賭網站上的這個問題已經有重複。 –

0

自加入可用於查找屬性和名稱上的匹配項;並且通過在E_ID上使用<我們確保我們只得到1個記錄匹配而不是其反向。

Rextester Working Example

假設

  1. mySQL的;但是這沒有特定的數據庫邏輯,所以它幾乎適用於任何引擎。
  2. 註冊表是一個記錄在表中與這3個獨特的領域。

所以

SELECT A.Property_ID, A.E_ID, A.Name, B.E_ID 
FROM Tbl A 
INNER JOIN tbl B 
on A.Property_ID = B.Property_ID 
and A.Name = B.Name 
and A.E_ID < B.E_ID 

數據:

+-------------+------+-------+---+ 
| Property_ID | E_ID | Name | | 
+-------------+------+-------+---+ 
|   1 | 1 | A  | | 
|   1 | 1 | A  | | 
|   2 | 1 | Test | | 
|   2 | 2 | Test | | 
|   3 | 2 | Test2 | | 
|   3 | 3 | Test3 | | 
|   4 | 4 | Test4 | | 
|   5 | 5 | Test5 | | 
|   6 | 7 | Test6 | | 
|   6 | 6 | Test6 | | 
+-------------+------+-------+---+ 

給出:

+-------------+------+-------+---+ 
|   2 | 1 | Test | 3 | 
|   6 | 6 | Test6 | 7 | 
+-------------+------+-------+---+ 

但不:

+-------------+------+-------+---+ 
|    |  |  | | 
|   2 | 2 | Test | 1 | 
|   6 | 7 | Test6 | 6 | 
+-------------+------+-------+---+ 
0
SELECT e_id, property_id, name 
FROM table1 
WHERE e_id in (SELECT e_id 
       FROM table1 
       GROUP BY e_id 
       HAVING count(e_id) > 1) 
+0

我不相信這會返回所需的結果:在這裏試試吧:http://rextester.com/YCMSOF94139 – xQbert

+0

剛剛測試了我的查詢使用您的網址,它做了我所期望的事情。除非我不明白這個問題。 – Khaled