Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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
返回colA被colB复制但未复制的所有MySQL行_Mysql_Sql - Fatal编程技术网

返回colA被colB复制但未复制的所有MySQL行

返回colA被colB复制但未复制的所有MySQL行,mysql,sql,Mysql,Sql,我们试图在一个MySQL数据库中发现数据错误,我想不出一个不破坏数据库的方法来处理这个问题 以下是数据的模型: Table: EXAMPLE +-----+------+-------+ | ID | PID | YEAR | +-----+------+-------+ | | | | | 001 | A | 2014 | | | | | | 002 | B | 2014 | | | |

我们试图在一个MySQL数据库中发现数据错误,我想不出一个不破坏数据库的方法来处理这个问题

以下是数据的模型:

Table: EXAMPLE
+-----+------+-------+
| ID  |  PID |  YEAR |
+-----+------+-------+
|     |      |       |
| 001 |  A   |  2014 |
|     |      |       |
| 002 |  B   |  2014 |
|     |      |       |
| 003 |  A   |  2014 |
|     |      |       |
| 004 |  A   |  2009 |
|     |      |       |
| 005 |  B   |  2014 |
|     |      |       |
| 006 |  C   |  2014 |
|     |      |       |
| 007 |  C   |  2014 |
+-----+------+-------+
目标是返回PID和YEAR彼此不同步的所有行。如果有三行PID匹配,但其中任何一行的年份错误,则需要返回所有行

在上述示例数据中,将返回以下内容:

+-----+------+-------+
| ID  |  PID |  YEAR |
+-----+------+-------+
|     |      |       |
| 001 |  A   |  2014 |
|     |      |       |
| 003 |  A   |  2014 |
|     |      |       |
| 004 |  A   |  2009 |
+-----+------+-------+
到目前为止,我处理的查询如下所示:

SELECT EXAMPLE.ID, EXAMPLE.PID, EXAMPLE.YEAR 
FROM EXAMPLE
INNER JOIN
(SELECT PID FROM EXAMPLE where PID HAVING COUNT(PID) > 1 GROUP BY PID) tmpTbl
ON EXAMPLE.PID = tmpTbl.PID
问题是在我的真实数据集中,子查询返回数据库中255k行中的26k行。预期的结果是少这里是你的结果和更多的观看我的处理动画

我走对了吗?有没有我忽略的更有效的方法

非常感谢

SELECT EXAMPLE.*
FROM
  EXAMPLE INNER JOIN (SELECT PID
                      FROM EXAMPLE
                      GROUP BY PID
                      HAVING COUNT(DISTINCT Year)>1) Dup
  ON Example.PID = Dup.PID
请看小提琴

请看小提琴

请看小提琴

请看小提琴。

试试类似的东西

SELECT e.* 
FROM example as e 
WHERE EXISTS (SELECT PID FROM example as e1 
              WHERE e1.PID = e.PID AND e1.YEAR <> e.YEAR)
试试像这样的东西

SELECT e.* 
FROM example as e 
WHERE EXISTS (SELECT PID FROM example as e1 
              WHERE e1.PID = e.PID AND e1.YEAR <> e.YEAR)
试试像这样的东西

SELECT e.* 
FROM example as e 
WHERE EXISTS (SELECT PID FROM example as e1 
              WHERE e1.PID = e.PID AND e1.YEAR <> e.YEAR)
试试像这样的东西

SELECT e.* 
FROM example as e 
WHERE EXISTS (SELECT PID FROM example as e1 
              WHERE e1.PID = e.PID AND e1.YEAR <> e.YEAR)
您可以改为使用exists子查询执行此操作:

select e.*
from example e
where exists (select 1
              from example e2
              where e2.pid = e.pid and
                    e2.year <> e.year
             );
您可以改为使用exists子查询执行此操作:

select e.*
from example e
where exists (select 1
              from example e2
              where e2.pid = e.pid and
                    e2.year <> e.year
             );
您可以改为使用exists子查询执行此操作:

select e.*
from example e
where exists (select 1
              from example e2
              where e2.pid = e.pid and
                    e2.year <> e.year
             );
您可以改为使用exists子查询执行此操作:

select e.*
from example e
where exists (select 1
              from example e2
              where e2.pid = e.pid and
                    e2.year <> e.year
             );


子查询应使用countdistinct。这可能会大大加快查询速度。另外,have应该按照小组的顺序进行。这一区别不会给我带来任何结果。计数在我的代码中的正确位置,很抱歉。事实上,这应该是countdistincdt year,因为这就是你想要找到的差异。如果我理解正确的话,您不希望任何pid有多行。您的子查询应该使用countdistinct。这可能会大大加快查询速度。另外,have应该按照小组的顺序进行。这一区别不会给我带来任何结果。计数在我的代码中的正确位置,很抱歉。事实上,这应该是countdistincdt year,因为这就是你想要找到的差异。如果我理解正确的话,您不希望任何pid有多行。您的子查询应该使用countdistinct。这可能会大大加快查询速度。另外,have应该按照小组的顺序进行。这一区别不会给我带来任何结果。计数在我的代码中的正确位置,很抱歉。事实上,这应该是countdistincdt year,因为这就是你想要找到的差异。如果我理解正确的话,您不希望任何pid有多行。您的子查询应该使用countdistinct。这可能会大大加快查询速度。另外,have应该按照小组的顺序进行。这一区别不会给我带来任何结果。计数在我的代码中的正确位置,很抱歉。事实上,这应该是countdistincdt year,因为这就是你想要找到的差异。如果我理解正确的话,您不希望任何pid包含多行内容。我尝试运行此程序,但它仍然锁定了所有内容,并且从未返回结果。@VSack。你用索引运行了第一个吗?很好,在不到2分钟内返回结果!比破坏服务器要好得多。现在唯一的问题是它没有返回pid。字段返回为空。无需担心。这个数据集糟透了。谢谢你的帮助!我试着运行它,但它仍然锁定了所有内容,并且从未返回结果。@VSack。你用索引运行了第一个吗?很好,在不到2分钟内返回结果!比破坏服务器要好得多。现在唯一的问题是它没有返回pid。字段返回为空。无需担心。这个数据集糟透了。谢谢你的帮助!我试着运行它,但它仍然锁定了所有内容,并且从未返回结果。@VSack。你用索引运行了第一个吗?很好,在不到2分钟内返回结果!比破坏服务器要好得多。现在唯一的问题是它没有返回pid。字段返回为空。无需担心。这个数据集糟透了。谢谢你的帮助!我试着运行它,但它仍然锁定了所有内容,并且从未返回结果。@VSack。你用索引运行了第一个吗?很好,在不到2分钟内返回结果!比破坏服务器要好得多。现在唯一的问题是它没有返回pid。字段返回为空。无需担心。这个数据集糟透了。谢谢你的帮助!我试过运行这个,但它仍然锁定了所有内容,从未返回结果。我试过运行这个,但它仍然锁定了所有内容,从未返回结果。我试过运行这个,但它仍然锁定了所有内容,从未返回结果。我试过运行这个,但它仍然锁定了所有内容,从未返回结果。