Saya baru sahaja mengubah suai jadual dalam PostgreSQL kepada NULLABLE seperti berikut:
CREATE TABLE a { a_name varchar NOT NULL b_id BIGINT <-- was previously NOT NULL with no problems } CREATE TABLE b { id BIGSERIAL, b_name varchar NOT NULL }
a.b_id > b.id mempunyai kekangan kunci asing.
Saya mempunyai beberapa pertanyaan yang menyertai jadual ini dan mengembalikan b.nama serupa dengan ini:
-- name: List :many SELECT a_name, b_name FROM a LEFT JOIN b ON b.id = a.bid <-- produces NULL columns in results
Disebabkan LEFT JOIN
,查询 b_name
的返回类型可以是 NULL
。 a.b_id
中任何为 NULL
的行都将为 b_name 返回 NULL
. memerhati.
Sebenarnya, pertanyaannya jauh lebih kompleks, menghantar berbilang parameter nullable dalam klausa WHERE, tetapi secara intuitif saya tidak fikir itu masalahnya. Pasti SQLC mengkonfigurasi struktur barisnya daripada bahagian SELECT pertanyaan...?
SQLC menjana struktur baris yang serupa dengan ini:
type ListRow struct { AName string `json:"a_name"' BName string `json:"b_name"' }
BName sepatutnya boleh dibatalkan (saya menggunakan pelbagai penggantian nol gobuffalo dalam konfigurasi), tetapi tiada dalam struct, sekali gus menyebabkan ralat imbasan:
"sql: Scan error on column index 1, name \"b_name\": converting NULL to string is unsupported"
Saya jelas kehilangan sesuatu yang jelas daripada dokumentasi, kerana ini mestilah operasi biasa. Setakat ini saya tidak mempunyai sebarang masalah menggunakan SQLC dengan pertanyaan jadual INNER JOIN yang agak kompleks atau dengan jenis pemulangan lajur yang boleh dibatalkan.
Tidak pasti betapa aktifnya komuniti SO tentang SQLC, menghargai sebarang maklum balas, intuitif atau kabur.
Cadangan - Letakkan b_name
替换为 coalesce(b_name, '** Attention **')
dalam pertanyaan untuk melihat perkara yang mungkin berlaku.
SELECT a_name, coalesce(b_name, '** Attention **') FROM a LEFT JOIN b ON b.id = a.bid;
atau menggantikannya dengan coalesce(b_name, '')
jika itu boleh diterima dan masuk akal.
SELECT a_name, coalesce(b_name, '') FROM a LEFT JOIN b ON b.id = a.bid;
atau tapis b_name
kepada keputusan batal
SELECT a_name, b_name FROM a LEFT JOIN b ON b.id = a.bid where b_name is not null;
Atas ialah kandungan terperinci Ralat semasa mengimbas lajur NULL dalam kod yang dijana SQLC menggunakan LEFT join dalam pertanyaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!