2013-02-21 28 views
-8

我想從表中檢索行中所有兩列的值與另一個roe中的其他兩個值相匹配的所有行,例如我有gps co-ords在long和lat中分割,我想看到這些匹配在任何行?SQL語句思維不明顯

回答

2

一個簡單GROUP BY應該爲你工作:

SELECT Col1,Col2 
FROM YourTable T 
GROUP BY Col1,Col2 
HAVING COUNT(*) > 1 

請發表您已經嘗試什麼前進......

- 編輯 -

如果你看在返回所有具有相同緯度/經度的行時,則可以這樣工作:

SELECT * 
FROM YourTable 
WHERE (lat,lon) IN (
     SELECT lat,lon 
     FROM YourTable 
     GROUP BY lat,lon 
     HAVING COUNT(*) > 1 
) 

http://sqlfiddle.com/#!2/f9658/5

+0

+1。 。 。做一個加入的選擇只是令人不快。 – 2013-02-21 18:43:26

+0

已經嘗試了一些與此類似的東西,即「select *」只是區別,但它只返回匹配值的一個實例。 – user2096659 2013-02-21 18:52:09

+0

@ user2096659 - 看到這個例子小提琴 - 如果你可以輸入你的測試數據,而不是返回,我會看看:http://sqlfiddle.com/#!2/71e85/3 – sgeddes 2013-02-21 18:54:32

1

你可以有一個where子句中的多個條件:

SELECT * FROM tbl1 
WHERE tbl1.lat = tbl2.lat AND tbl1.long = tbl2.long 

對於同一個表,你問你可以嘗試自聯接是這樣的:

SELECT t1.ID, t2.ID from myTable as t1 
INNER JOIN myTable as t2 
WHERE t1.lat = t2.lat and t1.long = t2.long 

或者用組查看有多少,並可以通過子選擇或第二個查詢返回的經緯度得到實際記錄:

SELECT t.lat, t.lng, count(*) from myTable as t 
GROUP BY (t.lat, t.long) 
HAVING Count(*) >=2 

與子選擇類似(可能需要調試):

SELECT * from myTable as t1, 
(SELECT t.lat, t.lng from myTable as t 
GROUP BY (t.lat, t.long) 
HAVING Count(*) >=2) as t2 
WHERE t2.lat = t1.lat and t2.long = t1.long 

如果可以有很多條記錄有相同的緯度/多頭,我建議拉回經/緯使用組通過與具有條件2個或更多匹配,然後再次遍歷表格以獲取代碼中每對匹配的所有記錄。

+0

我只有使用類似於您的組的東西由我變得非常接近我想要什麼,但它只返回replicaed號的一個實例,即我已經進入這樣它應該返回2中的數據的一個表NAD行,但它只返回1. – user2096659 2013-02-21 19:06:27

+0

+1的幫助 - 謝謝。 – sgeddes 2013-02-21 19:12:53