我有两个表
表 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 |
如前所述,虽然肯定可行,但这是一个相当复杂的请求。无论如何,这里有一些东西可以帮助您入门...
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 |
+----+-----------+---------+