首页 > 解决方案 > 如果存在使用 MySQL 的发生模式,则查找所有值为 x 的行

问题描述

我有两张桌子

表 A

--id--something--
|  1 |    x     |
|  2 |    y     |
|  3 |    x     |
|  4 |    z     |
|  5 |    x     |
|  6 |    z     |

表 B

--id-----A.id-----Value--
|  1 |    1    |   0    |
|  2 |    5    |   1    |
|  3 |   10    |   1    |
|  4 |   17    |   1    |
|  5 |   19    |   0    |
|  6 |   34    |   1    |

我想从表 A 中找到所有“东西”,至少有一个模式:有一行与表 B 有关系,值 = 0,下一行在“某物”列中具有相同的值没有与表 B 完全相关。

在这种情况下,它将是:

x

因为:

加入表:

  --id--something-- --id-----A.id-----Value--
 |  1 |    x     | |  1 |    1    |   0    |
 |  3 |    x     | |NULL|   NULL  |  NULL  |

标签: mysql

解决方案


如前所述,虽然确实可行,但这是一个相当复杂的要求。无论如何,这里有一些东西可以让你开始......

 SELECT x.*
      , MIN(y.id) next_id 
   FROM a x 
   JOIN a y 
     ON y.id > x.id 
    AND y.something = x.something 
  GROUP 
     BY x.id;
+----+-----------+---------+
| id | something | next_id |
+----+-----------+---------+
|  1 | x         |       3 |
|  3 | x         |       5 |
|  4 | z         |       6 |
+----+-----------+---------+

推荐阅读