SQLite外键从另一个表获取值

时间:2015-12-18 22:10:18

标签: android mysql sqlite android-adapter simplecursoradapter

所以我有3张桌子:

proveedor: _ID descripcion

ALMACEN: _ID descripcion

Cab_ing _ID descripcion cod_proveedor cod_almacen  FOREIGN KEY(cod_proveedor)REFERENCES provedores(_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”时,例如它显示。 我不知道为什么,但我认为是参考问题。

编辑:

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

Proveedor表

ID      descripcion
1       R*1005
2       R*10335

Almacen表

ID      descripcion
3       a*10
6       a*12

Cab_ing表

ID      cod_proveedor   cod_almacen
1          1                 3
2          2                 3

1 个答案:

答案 0 :(得分:0)

它可能与您引用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