Go的sqlc支持join吗?

Sri*_*nth 2 go sqlc

我正在从https://docs.sqlc.dev/en/latest/howto/query_count.html阅读 SQLC 文档。我想在我的项目中使用它。但是,我没有看到任何与表上的连接操作相关的文档。在 SQLC 中真的可能吗?如果是,我在哪里可以找到文档或参考资料?

Von*_*onC 5

像“ cdf7025: Add MySQL json test ”(或“ 456fcb1 Add MySQL test forSELECT * JOIN ”)这样的提交表明支持连接。

2021:但确实,正如问题 643中提到的,使用 JOIN 的查询目前尚未记录。

2023 年:同一期 643现在(2023 年 9 月)包含对新文档的引用(感谢Kyle Gray):

嵌入结构

嵌入允许您在更多查询中重用现有模型结构,从而减少手动序列化工作。首先,假设我们有以下包含学生和测试分数的模式。

CREATE TABLE students (
  id   bigserial PRIMARY KEY,
  name text NOT NULL,
  age  integer NOT NULL
);

CREATE TABLE test_scores (
  student_id bigint NOT NULL,
  score      integer NOT NULL,
  grade      text NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

我们想要选择学生记录和他们在测试中获得的分数。我们通常会这样做:

-- name: ScoreAndTests :many
SELECT students.*, test_scores.*
FROM students
JOIN test_scores ON test_scores.student_id = students.id
WHERE students.id = ?;
Run Code Online (Sandbox Code Playgroud)

使用 Go 时,sqlc 将生成如下结构:

type ScoreAndTestsRow struct {
  ID        int64
  Name      string
  Age       int32
  StudentID int64
  Score     int32
  Grade     string
}
Run Code Online (Sandbox Code Playgroud)

通过嵌入,结构将包含两个表的模型,而不是扁平的列列表。

-- name: ScoreAndTests :many
SELECT sqlc.embed(students), sqlc.embed(test_scores)
FROM students
JOIN test_scores ON test_scores.student_id = students.id
WHERE students.id = ?;
Run Code Online (Sandbox Code Playgroud)
type ScoreAndTestsRow struct {
  Student   Student
  TestScore TestScore
}
Run Code Online (Sandbox Code Playgroud)

讨论363指向.sqlc.embed