【问题标题】:SQLite foreign key to get value from another tableSQLite 外键从另一个表中获取值
【发布时间】:2015-12-18 22:10:17
【问题描述】:

所以我有 3 张桌子:

提供者: _ID 说明

阿尔马森: _ID 说明

驾驶舱 _ID 描述 cod_proveedor cod_almacen 外键(cod_proveedor)参考证明(_id) FOREIGN KEY(cod_almacen) REFERENCES almacenes(_id)

当我执行这个查询时:

                 c = db.rawQuery(
                        " SELECT "
                        + "a."+KEY_ROWID + " AS _id,"
                        + "a.cod_agencia AS cod_agencia" + ","
                        + "a.fecha AS fecha" + ","
                        + "b.descripcion AS cod_proveedor" + ","
                        + "c.descripcion AS cod_almacen" + ","
                        + "a.estado AS estado" + ""
                        + " FROM " 
                        + "cab_ings a, proveedores b, almacenes c" 
                        +" WHERE a.cod_proveedor = b._id AND a.cod_almacen = c._id",null);

它不显示任何内容,例如当我将“b._id”改为“0”时,它会显示。 我不知道为什么,但我认为是参考问题。

编辑:

我想要两个表的值(描述),这就是为什么我使用传统查询 a.id1 -> b.id AND a.id2 -> b.id

提供者表

ID      descripcion
1       R*1005
2       R*10335

阿尔马辛桌

ID      descripcion
3       a*10
6       a*12

驾驶台

ID      cod_proveedor   cod_almacen
1          1                 3
2          2                 3

【问题讨论】:

  • 不应该; “其中 b._id = a.cod_proveedor 和 c._id = a.cod_almacen”?
  • 不,还是一样。 b._id 和 c._id 是问题:S
  • 可以展示几行样本数据吗?我对搜索的含义感到困惑。

标签: android mysql sqlite android-adapter simplecursoradapter


【解决方案1】:

这可能与您引用ProveedorAlmacen 表的主键的方式有关。在您的示例 DDL 中,该字段被命名为 ID,但在连接中有对 _id 字段的引用。 (可能是指select 中的别名?)

我创建了以下表格:

CREATE TABLE "Proveedor" ("ID" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , "descripcion" VARCHAR)

CREATE TABLE "Almacen" ("ID" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , "descripcion" VARCHAR)

CREATE TABLE "Cab_ing" ("ID" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , "cod_proveedor" INTEGER, "cod_almacen" INTEGER)

... 并随后插入了您在上面指定的相同测试数据。使用这个查询:

select 
    cab.ID as _id,
    pro.descripcion as cod_proveedor,
    alm.descripcion as cod_almacen
from 
    Cab_ing cab
        inner join Proveedor pro on cab.cod_proveedor = pro.ID
        inner join Almacen alm on cab.cod_almacen = alm.ID

...我得到两行返回:

  1. ID=1,cod_proveedor=1,cod_almacen=3
  2. ID=1,cod_proveedor=2,cod_almacen=3

【讨论】:

  • 好吧,我正在管理游标,所以当我将“b._id”更改为 0 时,我的表 ID 也需要是前缀“_ID”,它显示数据。如果你看到这个帖子 stackoverflow.com/questions/4313987/… 它也这么说
  • 您查看过表中实际存在的数据吗?
  • 是的,我在 cab_ings 中插入了两行,当我更改 cab.cod_proveedor= 0 AND cab.cod_almacen = 0 时,它会显示在列表视图中
猜你喜欢
  • 1970-01-01
  • 2014-03-23
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多