这里有一些类似的问题。没有提供解决方案。我想将新记录插入到表 B 中,但前提是表 A 中存在外键。要清楚,我不希望插入选择的结果。我只需要知道外键存在。
INSERT INTO tableB (tableA_ID,code,notes,created) VALUES ('24','1','test',NOW())
SELECT tableA_ID FROM tableA WHERE tableA_ID='24' AND owner_ID='9'
显然,上述方法无效。但这有可能吗?我想将新数据插入到tableB中,前提是tableA中的行记录存在且属于owner_ID。
到目前为止,我看到的查询涉及从SELECT查询中插入结果 - 我不希望这样做。
答案 0 :(得分:2)
试试这个:
INSERT INTO tableB (tableA_ID,code,notes,created)
SELECT id, code, notes, created
FROM ( SELECT '24' as id, '1' as code, 'test' as notes, NOW() as created) t
WHERE EXISTS
(
SELECT tableA_ID
FROM tableA
WHERE tableA_ID='24' AND owner_ID='9'
)
答案 1 :(得分:0)
我知道这是一个很老的答案,但是现在它在Google搜索结果中的排名很高,我认为将来有可能会有所帮助。
在某些数据库配置中,您可能希望在具有两个或更多外键的表中插入一行。假设我们在聊天应用程序中有四个表:
Users
,Threads
,Thread_Users
和Messages
如果我们希望User
加入Thread
,我们将在Thread_Users
中插入一行,其中有两个外键:user_id
,{{1 }}。
然后,我们可以使用像这样的查询来插入是否存在两个外键,否则将自动失败:
thread_id
这有点冗长,但是可以很好地完成工作。
在应用程序端,如果受影响的行= 0,我们只需要引发一个错误,并可能尝试查看哪个键不存在。恕我直言,这是比执行两个SELECT查询然后再执行INSERT更好的方法,尤其是在不存在外键概率非常低的情况下。