Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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 如何使用联接仅在条件为真时插入?_Mysql_Sql_Join_Insert_Sql Update - Fatal编程技术网

Mysql 如何使用联接仅在条件为真时插入?

Mysql 如何使用联接仅在条件为真时插入?,mysql,sql,join,insert,sql-update,Mysql,Sql,Join,Insert,Sql Update,进行更新时,如果用户有权更新,我可以检查相关列,如以下示例所示: UPDATE answer JOIN test ON answer.test_id = test.id SET test_answer.answer = 'this is my answer' WHERE answer.id = 4 AND test.user_id = 8; 我想做一些类似的事情时,做插入,但我不知道如何。我试过这样的方法: INSERT INTO answer (id, test_id, answ

进行更新时,如果用户有权更新,我可以检查相关列,如以下示例所示:

UPDATE answer
  JOIN test ON answer.test_id = test.id
SET
  test_answer.answer = 'this is my answer'
WHERE answer.id = 4 AND test.user_id = 8;
我想做一些类似的事情时,做插入,但我不知道如何。我试过这样的方法:

INSERT INTO
  answer (id, test_id, answer)
VALUES 
  (null, 10, 'this is my answer')
JOIN 
  test AS test ON test.id = 10
WHERE 
  test.user_id = 8;
这里的想法是,只有拥有测试的用户才能为测试添加答案


我还可以首先获取id为10的测试,检查此测试的用户id是否为8,然后进行插入。但是我试着在一个查询中这样做。

对于
INSERT
没有这样的语法,您可以在其中应用
where
子句。若您希望限制用户添加答案,则仅当用户具有权限时。这意味着您需要首先查询您的
test
表,查看用户是否有此
test\u id
的权限,因为每个答案都应该与
test\u id
关联

SELECT test_id from test where test.id = 10 and test.user_id = 8;

若上面的查询返回任何行,那个么用户有权向这个特定的测试添加答案。然后,执行您的
insert
SQL,您不需要任何
WHERE
子句(正如您尝试的那样)。

insert没有这样的语法,但您需要让我们知道,您到底想在中实现什么insert@Ravi那么这是否意味着唯一的方法是首先获取id为10的测试,并检查权限,然后进行插入?您的加入无效。你甚至连桌子都不参加。我不知道,你想干什么。你需要哪种权限来分享你的设计,以及你想要达到的目标。看起来你的表格设计很糟糕,你能分享你现有的表格设计吗?