r2dbc 验证 id 是否存在然后插入行
r2dbc validate if id exists and then insert row
我有以下 sql 使用 r2dbc 的查询:
client.sql("INSERT INTO relation(id,rel_id) "
+ "VALUES(:id,:rel_id)")
.filter((statement, executeFunction) -> statement.returnGeneratedValues("id").execute())
.bind("id", id)
.bind("rel_id", rel_id)
.fetch()
.first()
.subscribe(
data -> log.info("inserted data : {}", data),
error -> log.error("error: {}", error)
);
我的问题是 rel_id 是对另一个 table 人的约束(外键)。所以,我想检查 rel_id 是否存在于 table Person 中,如果存在则插入到关系中。或者,如果不是在 Person table 中创建的,可能会抛出一些异常。我不知道这种情况的首选方式是什么。
这是一个仅使用 SQL 且不是 R2DBC 特定的解决方案:您可以使用 INSERT .. SELECT
仅有条件地插入数据:
INSERT INTO relation (id, rel_id)
SELECT :id, rel_id
FROM other_table
WHERE rel_id = :rel_id
如果在您的另一个 table 中没有 :rel_id
的行,那么该语句将不会插入任何内容。
我有以下 sql 使用 r2dbc 的查询:
client.sql("INSERT INTO relation(id,rel_id) "
+ "VALUES(:id,:rel_id)")
.filter((statement, executeFunction) -> statement.returnGeneratedValues("id").execute())
.bind("id", id)
.bind("rel_id", rel_id)
.fetch()
.first()
.subscribe(
data -> log.info("inserted data : {}", data),
error -> log.error("error: {}", error)
);
我的问题是 rel_id 是对另一个 table 人的约束(外键)。所以,我想检查 rel_id 是否存在于 table Person 中,如果存在则插入到关系中。或者,如果不是在 Person table 中创建的,可能会抛出一些异常。我不知道这种情况的首选方式是什么。
这是一个仅使用 SQL 且不是 R2DBC 特定的解决方案:您可以使用 INSERT .. SELECT
仅有条件地插入数据:
INSERT INTO relation (id, rel_id)
SELECT :id, rel_id
FROM other_table
WHERE rel_id = :rel_id
如果在您的另一个 table 中没有 :rel_id
的行,那么该语句将不会插入任何内容。