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

时间:2018-01-24 13:37:44

标签: 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, answer)
VALUES 
  (null, 10, 'this is my answer')
JOIN 
  test AS test ON test.id = 10
WHERE 
  test.user_id = 8;

这里的想法是只有拥有测试的用户才能添加测试答案。

我还可以先获取id为10的测试,检查此测试的user_id是否为8,然后执行插入操作。但我尝试在一个查询中执行此操作。

1 个答案:

答案 0 :(得分:1)

INSERT没有这样的语法可以应用WHERE子句。如果您希望限制用户添加答案,只有他们有权限。这意味着您需要首先查询test表,如果用户对此test_id有特权,则每个答案都应与test_id相关联。

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

如果上述查询返回任何行,则用户有权为此特定测试添加答案。然后,执行您的insert SQL,您不需要任何WHERE子句(正如您所尝试的那样)。