Flutter:Select 来自两个 table,在 Moor 数据库中不同
Flutter: Select from two table with distinc in Moor Database
我有这样的查询 SQL:
SELECT DISTINCT LST_KURS.LKU_ID, LST_KURS.LKU_SYMBOL FROM LST_PRODUCT_CALC join LST_KURS WHERE LST_PRODUCT_CALC.LKU_ID = LST_KURS.LKU_ID AND LST_PRODUCT_CALC.PSET_ID = #{psetId}
如何在 moor 上编写该查询?
这是我的 table 的 LST_KURS:
import 'package:moor/moor.dart';
class LstKurs extends Table {
@override
String get tableName => 'LST_KURS';
TextColumn get lkuId => text().named('LKU_ID')();
IntColumn get lsneId => integer().named('LSNE_ID').nullable()();
TextColumn get lkuSymbol => text().named('LKU_SYMBOL').nullable()();
@override
Set<Column> get primaryKey => {lkuId};
}
这是我的 table 的 lst_prodset_calc:
import 'package:moor_flutter/moor_flutter.dart';
class LstProdsetCalc extends Table {
@override
String get tableName => 'lst_prodset_calc';
IntColumn get psetId => integer()
.named('PSET_ID')
.customConstraint('NULL REFERENCES lst_prodset (PSET_ID)')();
TextColumn get lkuId => text().named('LKU_ID')();
@override
Set<Column> get primaryKey => {psetId, lkuId};
}
这是我在 Dao 中的功能:
Future<List<String>> getListKurs(int psetId) {
// idk how to write that query on moor in here
}
首先创建你的模型。
class KursSymbol {
final String lkuId;
final String lkuSymbol;
KursSymbol({
this.lkuId,
this.lkuSymbol,
});
}
并修改了你的dao函数。
Future<List<KursSymbol>> getKursSymbol(int psetId) {
return customSelect(
'SELECT DISTINCT LST_KURS.LKU_ID, LST_KURS.LKU_SYMBOL FROM lst_prodset_calc join LST_KURS WHERE lst_prodset_calc.LKU_ID = LST_KURS.LKU_ID AND lst_prodset_calc.PSET_ID = :psetId',
variables: [Variable.withInt(psetId)],
readsFrom: {lstKurs, lstProdsetCalc}).map((QueryRow row) {
return KursSymbol(
lkuId: row.readString('LKU_ID'),
lkuSymbol: row.readString('LKU_SYMBOL'),
);
}).get();
}
我有这样的查询 SQL:
SELECT DISTINCT LST_KURS.LKU_ID, LST_KURS.LKU_SYMBOL FROM LST_PRODUCT_CALC join LST_KURS WHERE LST_PRODUCT_CALC.LKU_ID = LST_KURS.LKU_ID AND LST_PRODUCT_CALC.PSET_ID = #{psetId}
如何在 moor 上编写该查询?
这是我的 table 的 LST_KURS:
import 'package:moor/moor.dart';
class LstKurs extends Table {
@override
String get tableName => 'LST_KURS';
TextColumn get lkuId => text().named('LKU_ID')();
IntColumn get lsneId => integer().named('LSNE_ID').nullable()();
TextColumn get lkuSymbol => text().named('LKU_SYMBOL').nullable()();
@override
Set<Column> get primaryKey => {lkuId};
}
这是我的 table 的 lst_prodset_calc:
import 'package:moor_flutter/moor_flutter.dart';
class LstProdsetCalc extends Table {
@override
String get tableName => 'lst_prodset_calc';
IntColumn get psetId => integer()
.named('PSET_ID')
.customConstraint('NULL REFERENCES lst_prodset (PSET_ID)')();
TextColumn get lkuId => text().named('LKU_ID')();
@override
Set<Column> get primaryKey => {psetId, lkuId};
}
这是我在 Dao 中的功能:
Future<List<String>> getListKurs(int psetId) {
// idk how to write that query on moor in here
}
首先创建你的模型。
class KursSymbol {
final String lkuId;
final String lkuSymbol;
KursSymbol({
this.lkuId,
this.lkuSymbol,
});
}
并修改了你的dao函数。
Future<List<KursSymbol>> getKursSymbol(int psetId) {
return customSelect(
'SELECT DISTINCT LST_KURS.LKU_ID, LST_KURS.LKU_SYMBOL FROM lst_prodset_calc join LST_KURS WHERE lst_prodset_calc.LKU_ID = LST_KURS.LKU_ID AND lst_prodset_calc.PSET_ID = :psetId',
variables: [Variable.withInt(psetId)],
readsFrom: {lstKurs, lstProdsetCalc}).map((QueryRow row) {
return KursSymbol(
lkuId: row.readString('LKU_ID'),
lkuSymbol: row.readString('LKU_SYMBOL'),
);
}).get();
}