mysql 查询不存在的id,删除一个表中的值,该表的id在mysql中不存在

我最近开始使用表之间的关系,当我尝试连接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)

但是我收到以下错误:#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)

有任何想法吗?

解决方法:

您不需要在子查询中进行JOIN:

DELETE FROM Menus

WHERE restid NOT IN (SELECT id FROM Eng_Restaurants)

标签:mysql,sql

来源: https://codeday.me/bug/20190718/1492054.html

### 回答1: 在 MySQL 可以使用 `NOT IN` 语句来查询一个表中不在某个集合的记录。 语法如下: ``` SELECT * FROM table_name WHERE id NOT IN (value1, value2, ...); ``` 例如,如果要查询 `users` 表中 id 不在 [1, 2, 3] 这个集合的记录,可以使用如下语句: ``` SELECT * FROM users WHERE id NOT IN (1, 2, 3); ``` ### 回答2: 要查询一个表中id不在某个集合的数据,可以使用MySQL的条件查询语句和NOT IN子句。 例如,假设有一个表名为"table_name",包含一个"id"列,要查询id不在集合{1, 2, 3}的数据,可以使用以下SQL语句: ```sql SELECT * FROM table_name WHERE id NOT IN (1, 2, 3); ``` 这条语句将返回表中id不在指定集合的所有数据。 具体解释: - SELECT *:指定要查询的列,使用星号表示查询所有列。 - FROM table_name:指定要查询的表名。 - WHERE id NOT IN (1, 2, 3):使用NOT IN子句来筛选不在指定集合。NOT IN表示不在指定集合,括号内为指定的集合。 执行上述SQL语句后,将返回满足条件的数据,即id不等于1、2和3的数据。 ### 回答3: 要查询一个表中id不在某个集合的数据,可以使用MySQL的"NOT IN"操作符来实现。 假设有一个表名为"table_name",字段名为"id",我们需要查询的集合的数据存放在一个表中,可以按照以下步骤进行操作: 1. 创建一个列表,包含要查询的集合的数据。 2. 编写SQL查询语句,使用"NOT IN"操作符来指定要查询的表名和字段名,并在括号内指定要排除的集合。 3. 执行查询语句,获取结果。 示例代码如下: ```mysql -- 创建查询集合的列表 SET @list = '1,2,3'; -- 执行查询 SELECT * FROM table_name WHERE id NOT IN (@list); ``` 上述代码,将要查询的集合数据存放在了一个名为"list"的变量,然后在查询语句使用"NOT IN"操作符来指定要查询的表和字段,以及要排除的集合,并执行查询。 请注意,这里假设id字段的数据类型是整数型。如果id的数据类型是其他类型(如字符串),需要根据实际情况进行调整。另外,查询结果将返回不在该集合的所有数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值