Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL有许多显示重复行_Mysql_Sql_Many To Many_Duplicates_Duplicate Data - Fatal编程技术网

MySQL有许多显示重复行

MySQL有许多显示重复行,mysql,sql,many-to-many,duplicates,duplicate-data,Mysql,Sql,Many To Many,Duplicates,Duplicate Data,请帮助编写查询 我有三张桌子: +-------------------+ | Patient | | PatientPhysician | | Physician | +-------------------+ 查找PhysicianOrganizationId中名字、姓氏和DoB相似的患者 我将向您展示数据,以便您更好地了解问题: mysql> SELECT pt.Id, pt.FirstName, pt.LastName, pt.DoB

请帮助编写查询

我有三张桌子:

+-------------------+
| Patient           |
| PatientPhysician  |
| Physician         |
+-------------------+
查找PhysicianOrganizationId中名字、姓氏和DoB相似的患者

我将向您展示数据,以便您更好地了解问题:

    mysql> SELECT pt.Id, pt.FirstName, pt.LastName, pt.DoB, ph.PhysicianOrganizationId
        -> FROM Patient pt, Physician ph, PatientPhysician pp
        -> WHERE pt.Id = pp.IdPatient AND ph.Id = pp.IdPhysician
        -> ORDER BY pt.Id;

+----+-----------+-------------+------------+-------------------------+
| Id | FirstName | LastName    | DoB        | PhysicianOrganizationId |
+----+-----------+-------------+------------+-------------------------+
|  1 | Mario     | Gotze       | 1989-01-09 |                     101 |
|  2 | Mario     | Gotze       | 1989-01-09 |                     102 |
|  3 | Mario     | Gotze       | 1989-01-09 |                     101 |
|  4 | Fillip    | Gotze       | 1989-01-09 |                     101 |
|  5 | Marco     | Rues        | 1988-09-12 |                     102 |
|  5 | Marco     | Rues        | 1988-09-12 |                     101 |
|  5 | Marco     | Rues        | 1988-09-12 |                     103 |
|  6 | Dimitri   | Payet       | 1986-10-10 |                     101 |
|  7 | Dimitri   | Payet       | 1986-10-10 |                     101 |
|  8 | Dimitri   | Payet       | 1986-10-10 |                     101 |
|  8 | Dimitri   | Payet       | 1986-10-10 |                     102 |
|  9 | Zlatan    | Ibrahimovic | 1982-01-12 |                     103 |
|  9 | Zlatan    | Ibrahimovic | 1982-01-12 |                     101 |
| 10 | Zlatan    | Ibrahimovic | 1982-01-12 |                     101 |
| 10 | Zlatan    | Ibrahimovic | 1982-01-12 |                     103 |
+----+-----------+-------------+------------+-------------------------+
15 rows in set (0.01 sec)
我编写了一个查询,但结果不正确:

SELECT
    pt.Id,
    pt.FirstName,
    pt.LastName,
    pt.DoB,
    ph.PhysicianOrganizationId

FROM Patient pt, Physician ph, PatientPhysician pp

WHERE pt.Id = pp.IdPatient AND ph.Id = pp.IdPhysician

GROUP BY pt.FirstName, pt.LastName, pt.DoB, ph.PhysicianOrganizationId

HAVING COUNT(*) > 1 ORDER BY pt.Id;
结果:

+----+-----------+-------------+------------+-------------------------+
| Id | FirstName | LastName    | DoB        | PhysicianOrganizationId |
+----+-----------+-------------+------------+-------------------------+
|  1 | Mario     | Gotze       | 1989-01-09 |                     101 | 
|  6 | Dimitri   | Payet       | 1986-10-10 |                     101 | 
|  9 | Zlatan    | Ibrahimovic | 1982-01-12 |                     103 |
|  9 | Zlatan    | Ibrahimovic | 1982-01-12 |                     101 |
+----+-----------+-------------+------------+-------------------------+
我需要这个结果:

+----+-----------+-------------+------------+-------------------------+
| Id | FirstName | LastName    | DoB        | PhysicianOrganizationId |
+----+-----------+-------------+------------+-------------------------+
|  1 | Mario     | Gotze       | 1989-01-09 |                     101 |
|  3 | Mario     | Gotze       | 1989-01-09 |                     101 |
|  6 | Dimitri   | Payet       | 1986-10-10 |                     101 |
|  7 | Dimitri   | Payet       | 1986-10-10 |                     101 |
|  8 | Dimitri   | Payet       | 1986-10-10 |                     101 |
|  9 | Zlatan    | Ibrahimovic | 1982-01-12 |                     103 |
|  9 | Zlatan    | Ibrahimovic | 1982-01-12 |                     101 |
| 10 | Zlatan    | Ibrahimovic | 1982-01-12 |                     103 |
| 10 | Zlatan    | Ibrahimovic | 1982-01-12 |                     101 |
+----+-----------+-------------+------------+-------------------------+

告诉我我做错了什么?

尝试将
pt.Id
添加到您的
分组依据
子句中:

SELECT
    pt.Id,
    pt.FirstName,
    pt.LastName,
    pt.DoB,
    ph.PhysicianOrganizationId
FROM
    Patient pt,
    Physician ph,
    PatientPhysician pp
WHERE
    pt.Id = pp.IdPatient
AND ph.Id = pp.IdPhysician
GROUP BY
    pt.Id,
    pt.FirstName,
    pt.LastName,
    pt.DoB,
    ph.PhysicianOrganizationId
HAVING COUNT(*) > 1
ORDER BY pt.Id;

注意:我尚未测试上述SQL

请尝试将
pt.Id
添加到您的
groupby
子句中:

SELECT
    pt.Id,
    pt.FirstName,
    pt.LastName,
    pt.DoB,
    ph.PhysicianOrganizationId
FROM
    Patient pt,
    Physician ph,
    PatientPhysician pp
WHERE
    pt.Id = pp.IdPatient
AND ph.Id = pp.IdPhysician
GROUP BY
    pt.Id,
    pt.FirstName,
    pt.LastName,
    pt.DoB,
    ph.PhysicianOrganizationId
HAVING COUNT(*) > 1
ORDER BY pt.Id;
SELECT pt.Id, tmp1.fname, tmp1.lname, tmp1.dob, tmp1.poid

FROM (

  SELECT pt.FirstName AS fname,
         pt.LastName AS lname,
         pt.DoB as dob,
         ph.PhysicianOrganizationId AS poid

  FROM Patient pt, Physician ph, PatientPhysician pp

  WHERE pt.Id = pp.IdPatient AND ph.Id = pp.IdPhysician

  GROUP BY fname, lname, dob, poid

  HAVING COUNT(*) > 1) AS tmp1

JOIN Patient AS pt ON pt.FirstName = tmp1.fname AND pt.LastName = tmp1.lname AND pt.DoB = tmp1.dob

JOIN PatientPhysician AS pp ON pt.Id = pp.IdPatient

JOIN Physician AS ph ON ph.Id = pp.IdPhysician AND tmp1.poid = ph.PhysicianOrganizationId

ORDER BY pt.Id;

注意:我还没有测试上面的SQL

我尝试过这个查询没有显示任何行。“空集(0.00秒)”我尝试了此查询,但未显示任何行。“空集(0.00秒)”太棒了!非常感谢你/当你在单词上犯小错误时,我会做出改变。太好了!非常感谢你/当你在单词上犯一些小错误时,我会做出改变。
SELECT pt.Id, tmp1.fname, tmp1.lname, tmp1.dob, tmp1.poid

FROM (

  SELECT pt.FirstName AS fname,
         pt.LastName AS lname,
         pt.DoB as dob,
         ph.PhysicianOrganizationId AS poid

  FROM Patient pt, Physician ph, PatientPhysician pp

  WHERE pt.Id = pp.IdPatient AND ph.Id = pp.IdPhysician

  GROUP BY fname, lname, dob, poid

  HAVING COUNT(*) > 1) AS tmp1

JOIN Patient AS pt ON pt.FirstName = tmp1.fname AND pt.LastName = tmp1.lname AND pt.DoB = tmp1.dob

JOIN PatientPhysician AS pp ON pt.Id = pp.IdPatient

JOIN Physician AS ph ON ph.Id = pp.IdPhysician AND tmp1.poid = ph.PhysicianOrganizationId

ORDER BY pt.Id;