Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtSpRlLft 148 of 224 menu
◀ ▶

Запись без пары в выборке в Dart

INNER JOIN отбрасывает родителя, у которого нет ни одной дочерней записи. LEFT JOIN оставляет все строки левой таблицы, а поля правой заполняет NULL, если пара не найдена.

Категория без товаров все равно попадает в результат, а имя товара читают с проверкой на пустоту:

import 'package:sqlite3/sqlite3.dart'; var db = sqlite3.open('left_catalog.db'); db.execute('PRAGMA foreign_keys = ON'); db.execute(''' CREATE TABLE IF NOT EXISTS categories ( id INTEGER PRIMARY KEY, label TEXT NOT NULL ) '''); db.execute(''' CREATE TABLE IF NOT EXISTS products ( id INTEGER PRIMARY KEY, category_id INTEGER NOT NULL, sku TEXT NOT NULL, FOREIGN KEY (category_id) REFERENCES categories (id) ) '''); db.execute( 'INSERT INTO categories (label) VALUES (?)', ['Tools'], ); db.execute( 'INSERT INTO categories (label) VALUES (?)', ['Empty shelf'], ); db.execute( 'INSERT INTO products (category_id, sku) VALUES (?, ?)', [1, 'T-100'], ); var rows = db.select(''' SELECT c.label, p.sku FROM categories c LEFT JOIN products p ON p.category_id = c.id ORDER BY c.id, p.id '''); for (var row in rows) { print(row['label']); print(row['sku'] ?? 'no sku'); } db.dispose();

Строка с id 2 дает null в sku. Сравнение с null после чтения подтверждает отсутствие значения:

import 'package:sqlite3/sqlite3.dart'; var db = sqlite3.open('left_null.db'); db.execute('PRAGMA foreign_keys = ON'); db.execute(''' CREATE TABLE IF NOT EXISTS categories ( id INTEGER PRIMARY KEY, label TEXT NOT NULL ) '''); db.execute(''' CREATE TABLE IF NOT EXISTS products ( id INTEGER PRIMARY KEY, category_id INTEGER NOT NULL, sku TEXT NOT NULL, FOREIGN KEY (category_id) REFERENCES categories (id) ) '''); db.execute( 'INSERT INTO categories (label) VALUES (?)', ['Empty shelf'], ); var rows = db.select(''' SELECT c.label, p.sku FROM categories c LEFT JOIN products p ON p.category_id = c.id WHERE c.label = 'Empty shelf' '''); if (rows.isNotEmpty) { var sku = rows.first['sku']; print(sku == null); } db.dispose();

В left_catalog.db добавьте категорию "Spare" без товаров. Выведите ее метку и "no sku", если артикул пуст.

Создайте left_teams.db с таблицами teams и members. Одна команда без участников должна появиться в выводе с пустым именем участника.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить