gpt4 book ai didi

mysql - 使用带有 WHERE IN 子句的 SELECT 语句执行 INSERT 尝试插入 SELECT 语句单独未返回的值

转载 作者:行者123 更新时间:2023-11-29 17:38:08 24 4
gpt4 key购买 nike

我正在尝试使用以下 MySQL 语句将值插入到空表中:

INSERT INTO buildings (name, description)
SELECT structures.name, structures.description
FROM structures
WHERE structures.structure_id IN (1, 2, 3, 4)
AND structures.deleted_at IS NULL;`

当我单独执行 SELECT 语句时,会返回预期的行。但是,当与 INSERT 结合使用时,我收到“数据截断”错误,因为该语句似乎试图插入已被软删除的行,因此其 ID 更改为类似 1__DEL__2016-06-21 18:19:53 的内容。 。作为证明这就是正在发生的事情的证据,删除 1来自 WHERE IN 子句可防止错误。

结构表如下所示:

+-----------------------------+----------+----------------------------------+----------------------+
| structure_id | name | description | deleted_at |
+-----------------------------+----------+----------------------------------+----------------------+
| 1 | House | Place for people. | null |
+-----------------------------+----------+----------------------------------+----------------------+
| 1__DEL__2016-06-21 18:19:53 | Home | Another name for house. | 2016-06-21 18:19:53 |
+-----------------------------+----------+----------------------------------+----------------------+
| 2 | Barn | Place for animals. | null |
+-----------------------------+----------+----------------------------------+----------------------+
| 3 | Outhouse | Place to go when you need to go. | null |
+-----------------------------+----------+----------------------------------+----------------------+

所以,我很好奇(a)为什么会发生这种情况,以及(b)我如何能够插入我需要的数据,而不从源表中删除软删除的条目。

对我来说特别奇怪的是 WHERE IN 子句似乎同时匹配 11__DEL__2016-06-21 18:19:53 ,就好像它没有挑选出完全匹配的内容一样。

谢谢。

最佳答案

由于Where子句中的structure_id列是varchar,因此您应该用引号将IN子句中的值引起来。

关于mysql - 使用带有 WHERE IN 子句的 SELECT 语句执行 INSERT 尝试插入 SELECT 语句单独未返回的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50158864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com