-8

我想从一个表中检索所有行,其中一行中两列的所有值与另一个 roe 中的其他两个值匹配,例如,我将 gps 坐标拆分为 long 和 lat,我想在任何行中查看这些匹配???

4

2 回答 2

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

于 2013-02-21T18:34:22.060 回答
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

或者使用 group 查看有多少并且可以通过子选择或对返回的纬度/经度进行第二次查询来获取实际记录:

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个或更多匹配条件的组来拉回纬度/经度,然后再次遍历表以获取与代码中每一对匹配的所有记录.

于 2013-02-21T18:31:02.883 回答