Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 带有多个存在条件的make if语句在为true时插入_Mysql - Fatal编程技术网

Mysql 带有多个存在条件的make if语句在为true时插入

Mysql 带有多个存在条件的make if语句在为true时插入,mysql,Mysql,大家好 我尝试: 当且仅当其他两个表中存在两个不同的行时,才在表中插入行。 如果有一个id为1的用户,并且有一个id为2的对象,那么第三个表应该填充1和2。 我使用预定义语句或任何调用它们的语句,希望在一个大查询中这样做,以免陷入某些竞争条件,其中一个检查条件是否为真,另一个删除一行,然后第一个插入,尽管另一个删除条件中所需的行 不起作用的查询如下所示: IF EXISTS(SELECT 1 FROM users WHERE userId=16) AND EXISTS(SELECT 1 FROM

大家好

我尝试:

当且仅当其他两个表中存在两个不同的行时,才在表中插入行。 如果有一个id为1的用户,并且有一个id为2的对象,那么第三个表应该填充1和2。 我使用预定义语句或任何调用它们的语句,希望在一个大查询中这样做,以免陷入某些竞争条件,其中一个检查条件是否为真,另一个删除一行,然后第一个插入,尽管另一个删除条件中所需的行

不起作用的查询如下所示:

IF EXISTS(SELECT 1 FROM users WHERE userId=16) AND EXISTS(SELECT 1 FROM things WHERE thingId=2) THEN INSERT INTO user_thing(userId, thingId) VALUES(2,3) END IF;
尝试:

我试着这样做,它的工作

从userId=16的用户中选择EXISTSSELECT 1,从thingId=2的用户中选择EXISTSSELECT 1

我也尝试过这个方法,效果很好:

将thingId值2,3插入用户_thinguserId

所以我不相信我的表有什么奇怪的地方,因为当我划分语句时它就起作用了。 但是,当我试图一次性将其转换为if-then语句时,它并不起作用

我想有一些奇特的东西,比如加入工会等等,但我是个书呆子,我真的很想写一些我理解的东西,而不是复制粘贴一些我不懂的东西,而且我确实很想知道为什么有些东西不起作用,而不是得到一个完全不同的解决方案

我确实试图寻找解决方案,在这里也是关于stackoverflow的,但找不到为什么

如果存在并且存在,则语句结束如果;无法工作。

您可以使用插入…选择而不是选择…值:


如果您的MySql版本为8.0+,则可以从dual中省略。

尝试将整个条件放在括号中

IF (EXISTS(SELECT 1 FROM users WHERE userId=16) AND EXISTS(SELECT 1 FROM things WHERE thingId=2)) THEN INSERT INTO user_thing(userId, thingId) VALUES(2,3) END IF;

我试过了,效果很好。但我觉得这很不自然,向后或者好像insert语句与查询的其余部分分离了。也许是因为我没有写或者理解不够清楚,你可以详细说明一下你的答案中到底发生了什么。也可能是我的查询不起作用的原因?select语句返回1行2列。这些列没有名称,因为只有在满足WHERE子句中的条件时才需要它们。table dual是一个特殊的一行一列表,在这种情况下使用,您只需要1行与任何表都不相关。你可以找到插入的文档…选择这里:啊。我想我只看到select在提到实际存在的列时被使用,在第2列和第3列中放上实际上不存在的erm。这就是我头脑发热的地方。哈哈。但是谢谢,我会看看你发布的链接,谢谢。在我标记为已回答之前,我将等待,以防有人可以修复我的无效解决方案。已经尝试过了。不起作用,几个if,一个select-before都存在于parentesis中,甚至前面提到的开始和结束都是一些查询问题的答案。这真让我讨厌
IF (EXISTS(SELECT 1 FROM users WHERE userId=16) AND EXISTS(SELECT 1 FROM things WHERE thingId=2)) THEN INSERT INTO user_thing(userId, thingId) VALUES(2,3) END IF;