我想更新我的表,以便共享值(在相同列中)的行被标记为这样.
示例表定义:
CREATE TABLE `MyTable` (
`id` int NOT NULL ,
`a` varchar(10) NOT NULL ,
`b` varchar(10) NOT NULL ,
`state` tinyint NOT NULL ,
PRIMARY KEY (`id`)
) ;
Run Code Online (Sandbox Code Playgroud)
我想更新在同一列中共享值的每一行的"状态".因此,如果第一行具有"a = AAAA"而第二行具有相同的"a"值,则两者都应该更新.
我试过这个,但它太慢了(不比使用JDBC在Java中做得快):
declare mycursor cursor for select id, a, b from mytable;
open mycursor;
repeat
fetch mycursor into idid, aa, bb;
update mytable set state=1 where (a=aa, b=bb)
until done end repeat;
close mycursor;
Run Code Online (Sandbox Code Playgroud)
有什么想法让这种方式变得更好?多年来我没有做过任何体面的SQL.
我们有一个表,business_users有user_id和business_id我们有重复.如何编写一个删除所有重复项的查询?
我最近开始使用表之间的关系,当我尝试连接2时,我发现有一些ID不存在外键.
对于这个问题,我们假设我有一个带有id和name的餐馆表,以及id为rest_id的菜单表,它是来自餐馆餐桌的外键.
我想删除所有菜单表中不存在的rest_id菜单.
我用过这个:
DELETE FROM `Menus` WHERE restid IN (SELECT DISTINCT `restid` from
`Menus` M left join `Eng_Restaurants` ER on M.`restid` = ER.`ID`
where ER.`ID` is null)
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:#1093 - 您无法在FROM子句中为更新指定目标表'Menus'.
请注意,子查询确实返回在restaurants表中不存在的id:
(SELECT DISTINCT `restid` from
`Menus` M left join `Eng_Restaurants` ER on M.`restid` = ER.`ID`
where ER.`ID` is null)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
将SELECT查询放在UPDATE查询的WHERE子句中时出错.
我的查询是这样的:
UPDATE `subschedulesseats` m
SET m.studentid='1'
WHERE m.`seatid`= (
SELECT h.`seatid`
FROM `subschedulesseats` h
WHERE h.`sessiontime`='02:30~04:00'
ORDER BY h.`seatid` ASC
LIMIT 2,1
)
Run Code Online (Sandbox Code Playgroud)
AND错误将显示如下:
"你不能在FROM子句中为更新指定目标表'm'"
我附上了错误显示的快照.

请有人帮我解决这个问题吗?
先感谢您
我是MYSQL查询语句的新手,我目前仍然坚持使用以下代码
UPDATE fb_messages
SET sent = 'Yes'
WHERE msg_id = (SELECT MAX(msg_id) AS MSG_ID
FROM fb_messages
WHERE sent = 'No')
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误
#1093 - You can't specify target table 'fb_messages' for update in FROM clause
Run Code Online (Sandbox Code Playgroud)
我搜索了一个解决方案,以解决类似的情况,但我真的找不到,请帮助
我想删除一组行,它们具有与此 SQL 选择相同的属性。
SELECT item_id, count(*) as item_in_order
FROM items
GROUP BY order_id
HAVING item_in_order = 1
Run Code Online (Sandbox Code Playgroud)
换句话说,这意味着我有订单项,我想删除仅包含一项的订单中的行。
例如:
item_id order_id
1 1
2 2
3 2
4 3
5 3
6 4
Run Code Online (Sandbox Code Playgroud)
所以我想删除 item_id 为 1 和 6 的行。
我必须max(id)从表中删除一行MySQL.我正在使用查询::
DELETE
FROM master
WHERE id=(
SELECT MAX(id)
FROM master)
Run Code Online (Sandbox Code Playgroud)
但得到error No. 1093.
有人可以帮帮我吗?
我正在尝试使用以下命令根据选择查询更新表:
UPDATE branches SET name =
(SELECT CONCAT(comp.name," ",bra.subsurb) as newname
FROM companies comp
RIGHT JOIN branches bra
ON comp.id = bra.company_id)
Run Code Online (Sandbox Code Playgroud)
根据这个问题,这应该有效,但这会产生错误:You can't specify target table 'branches' for update in FROM clause
不确定我做错了什么。
编辑:
最终这个查询做了我想要的事情:
UPDATE branches bra LEFT JOIN companies comp
ON comp.id = bra.company_id
SET bra.name = CONCAT(comp.name," ",bra.subsurb)
为什么这个查询不起作用?
DELETE FROM cancome WHERE user_id IN (
SELECT user_id FROM cancome
GROUP BY user_id
HAVING COUNT(user_id)>3
)
limit 3
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
[错误] 1093 - 您无法在FROM子句中为更新指定目标表'cancome'
假设我有一个产品表,并且只有 2 个字段;id 和购买日期。我想删除 2019 年购买的最后一个产品。我尝试使用以下查询来执行此操作:
DELETE FROM products
WHERE id = (SELECT id
FROM products
WHERE purchase_date LIKE '2019%'
ORDER BY purchase_date DESC
LIMIT 1);
Run Code Online (Sandbox Code Playgroud)
不幸的是,出现了标题中写的错误。我知道这个错误是一个已知错误,我已经尝试寻找解决方案。我已经查看了这里和这里,但是,我无法理解如何更改我的查询以使其正常工作。
我将很高兴获得帮助和解释。提前致谢。