使用MYSQL查询根据相似性选择行

时间:2013-12-08 13:00:44

标签: mysql

我有以下表格和值

name    dob         doj         sex     salary
dev     1989-01-01  2012-01-01  m       1200
anish   1989-07-14  1995-01-01  m       5000
aasha   1988-12-15  2009-06-05  f       5000

我需要关注输出。

name    dob         doj         sex     salary
anish   1989-07-14  1995-01-01  m       5000
aasha   1988-12-15  2009-06-05  f       5000

我需要选择获得相同金额

的人的详细信息

2 个答案:

答案 0 :(得分:1)

您可以将行限制为用户,以便存在获得相同金额的其他用户,如下所示:

SELECT *
FROM person p1
WHERE EXISTS (
    SELECT *
    FROM person p2
    WHERE p1.salary=p2.salary -- Has the same salary
      AND (p1.name <> p2.name -- But is not the same person
        OR p1.dob <> p2.dob
        OR p1.doj <> p2.doj
        OR p1.sex <> p2.sex
      )
)

添加主键可以简化查询,因为p1.pk <> p2.pk检查就足够了。

答案 1 :(得分:1)

你可以用2个查询来做到这一点。内部查询选择2个或更多人拥有的所有工资。

SELECT
  name,
  dob,
  doj,
  sex,
  t.salary
FROM
  table AS t
  INNER JOIN (SELECT
                salary
              FROM
                table
              GROUP BY
                salary
              HAVING
                COUNT(*) > 1) AS s 
     USING (salary)