ホームページ >バックエンド開発 >Golang >クエリで LEFT 結合を使用して SQLC 生成コードで NULL 列をスキャン中にエラーが発生しました

クエリで LEFT 結合を使用して SQLC 生成コードで NULL 列をスキャン中にエラーが発生しました

WBOY
WBOY転載
2024-02-06 08:30:04459ブラウズ

使用查询中的 LEFT 连接扫描 SQLC 生成的代码中的 NULL 列时出错

質問の内容

PostgreSQL のテーブルを次のように NULLABLE に変更しました。 リーリー

a.b_id > b.id には外部キー制約があります。

これらのテーブルを結合し、次のような b.name を返すクエリが多数あります:

リーリー

LEFT JOIN

により、クエリ b_name の戻り値の型は NULL になる可能性があります。 a.b_id の行が NULL である場合は、b_name に対して NULL が返されます。観察する。 実際には、クエリははるかに複雑で、WHERE 句で複数の null 許容パラメータを送信しますが、直感的にはそれが問題ではないと思います。確かに SQLC はクエリの SELECT 部分から行構造を構成します...?

SQLC は次のような行構造を生成します:

リーリー

BName は null 可能である必要があります (設定でさまざまな gobuffalo null オーバーライドを使用しています) が、構造体に含まれていないため、スキャン エラーが発生します:

リーリー

これは定期的な操作であるはずなので、明らかにドキュメントから何か明らかなことが抜け落ちています。これまでのところ、かなり複雑な INNER JOIN テーブル クエリや null 許容列の戻り値の型を使用した SQLC の使用に問題はありませんでした。

SO コミュニティが SQLC に関してどれほど活発であるかわかりません。直感的または漠然としたフィードバックをいただければ幸いです。

正解

提案 - クエリ内の
b_name

coalesce(b_name, '** 注意 **') # に置き換えます。 ## 何が起こるか見てみましょう。 リーリー 受け入れ可能で意味がある場合は、coalesce(b_name, '')

に置き換えることもできます。

リーリー または、b_name

が null の結果をフィルタリングします

リーリー

以上がクエリで LEFT 結合を使用して SQLC 生成コードで NULL 列をスキャン中にエラーが発生しましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。