在 select 中创建一个带有 select 的 mysql 例程游标
Create a mysql routine cursor with a select in a select
我有一个 table 如下所示:
id gnome dead
-----------------
1 pet yes
2 pet no
3 pet no
4 kin no
5 kin yes
6 kin no
现在,我想在例程中创建一个游标:
1) "dead" 为 "yes" 的所有行;
2) 仅当没有 "dead" = "yes" 之前相同的 "gnome" 时 "dead" 为 "no" 的行。
结果应该是:
id gnome dead
-----------------
1 pet yes
4 kin no
5 kin yes
好的,我想我找到了解决办法
SELECT * FROM asd AS t WHERE dead = 'yes' OR NOT EXISTS(SELECT k.dead FROM asd as k WHERE k.id < t.id AND t.gnome = k.gnome and k.dead = 'yes')
我在这里创建了一个 fiddle:
http://sqlfiddle.com/#!9/bc0cd/8/0
你怎么看?在常规游标中应该没问题吗?
您的解决方案似乎不符合您的要求。这是一个解决方案:
SELECT *
FROM my_table
WHERE dead = 'yes'
UNION
SELECT x.*
FROM my_table x
LEFT
JOIN my_table y
ON y.gnome = x.gnome
AND y.dead = 'yes'
AND y.id < x.id
WHERE x.dead = 'no'
AND y.id IS NULL;
关于您的查询与我的查询之间的差异,请考虑以下几点:
SELECT * FROM my_table;
+----+-------+------+
| id | gnome | dead |
+----+-------+------+
| 1 | pet | yes |
| 2 | pet | no |
| 3 | pet | no |
| 4 | kin | no |
| 5 | kin | yes |
| 6 | kin | no |
| 7 | cat | no |
| 8 | cat | yes |
| 9 | uno | no |
| 10 | uyes | yes |
+----+-------+------+
是否要返回第 9 行?
我有一个 table 如下所示:
id gnome dead
-----------------
1 pet yes
2 pet no
3 pet no
4 kin no
5 kin yes
6 kin no
现在,我想在例程中创建一个游标:
1) "dead" 为 "yes" 的所有行;
2) 仅当没有 "dead" = "yes" 之前相同的 "gnome" 时 "dead" 为 "no" 的行。
结果应该是:
id gnome dead
-----------------
1 pet yes
4 kin no
5 kin yes
好的,我想我找到了解决办法
SELECT * FROM asd AS t WHERE dead = 'yes' OR NOT EXISTS(SELECT k.dead FROM asd as k WHERE k.id < t.id AND t.gnome = k.gnome and k.dead = 'yes')
我在这里创建了一个 fiddle: http://sqlfiddle.com/#!9/bc0cd/8/0
你怎么看?在常规游标中应该没问题吗?
您的解决方案似乎不符合您的要求。这是一个解决方案:
SELECT *
FROM my_table
WHERE dead = 'yes'
UNION
SELECT x.*
FROM my_table x
LEFT
JOIN my_table y
ON y.gnome = x.gnome
AND y.dead = 'yes'
AND y.id < x.id
WHERE x.dead = 'no'
AND y.id IS NULL;
关于您的查询与我的查询之间的差异,请考虑以下几点:
SELECT * FROM my_table;
+----+-------+------+
| id | gnome | dead |
+----+-------+------+
| 1 | pet | yes |
| 2 | pet | no |
| 3 | pet | no |
| 4 | kin | no |
| 5 | kin | yes |
| 6 | kin | no |
| 7 | cat | no |
| 8 | cat | yes |
| 9 | uno | no |
| 10 | uyes | yes |
+----+-------+------+
是否要返回第 9 行?