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 的行,那么该语句将不会插入任何内容。