我正在从https://docs.sqlc.dev/en/latest/howto/query_count.html阅读 SQLC 文档。我想在我的项目中使用它。但是,我没有看到任何与表上的连接操作相关的文档。在 SQLC 中真的可能吗?如果是,我在哪里可以找到文档或参考资料?
像“ cdf7025: Add MySQL json test ”(或“ 456fcb1 Add MySQL test forSELECT * JOIN ”)这样的提交表明支持连接。
2021:但确实,正如问题 643中提到的,使用 JOIN 的查询目前尚未记录。
2023 年:同一期 643现在(2023 年 9 月)包含对新文档的引用(感谢Kyle Gray):
嵌入结构
嵌入允许您在更多查询中重用现有模型结构,从而减少手动序列化工作。首先,假设我们有以下包含学生和测试分数的模式。
Run Code Online (Sandbox Code Playgroud)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 = ?;使用 Go 时,sqlc 将生成如下结构:
Run Code Online (Sandbox Code Playgroud)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 }
讨论363指向.sqlc.embed