进货记录表(订单号,物品,类型,数量`)  KEY(订单号)
数据例:
000001        苹果      1      1
000002        杯子01`   2      1
注:类型 "1"代表水果,"2"代表日常用品`
 
水果表 (ID,供货商) KEY(ID)
数据例:
苹果    供货商1
香蕉    供货商2
橘子    供货商3日常用品表 (ID,序列号,供货商)``KEY(ID,序列号)
数据例:
水壶   00  供货商1
杯子   01  供货商12
铅笔   02  供货商13现在要根据画面输入的内容来查询进货纪录
抽出内容:订单号,物品,数量,供货商三张表的连接方式为
类型`= "1" 时,进货记录表.物品 = 水果表.ID      (左连接)
类型`= "2" 时,进货记录表.物品 = 日常用品表.ID || 日常用品表.序列号    (左连接)现在怎样根据画面输入的供货商来查询进货纪录?
想了半天好像只能分开查询,用UNION连接了
各位高手,有没有其他的方法?

解决方案 »

  1.   

    SELECT  订单号,物品,数量,供货商
    FROM 进货记录表,水果表
    WHERE 进货记录表.物品 = 水果表.ID(+)
    AND 类型 = "1"
    AND供货商 = ???
    UNION ALL
    SELECT  订单号,物品,数量,供货商
    FROM 进货记录表,水果表
    WHERE 进货记录表.物品 = 日常用品表.ID(+) || 日常用品表.序列号(+)
    AND 类型 = "2"
    AND供货商 = ???只有这样了?
      

  2.   

    select * from 进货记录表 a
    where 物品 in (select ID from 水果表 b where a.物品 = b.ID and 供货商=@供货商)
    or 物品 in (select ID from 日常用品表 c where a.物品 = c.ID || c.序列号  and 供货商=@供货商)--其中@供货商为变量
      

  3.   


    create table t1
    (
     id varchar(6),
     name varchar(100),
     typeshop int,
     key int
    )insert into t1 values('000001','苹果',1,1);
    insert into t1 values('000002','杯子01',2,1);
    commit;
    create table t2
    (
    id varchar(100),
    gname varchar(100)
    )insert into t2 values('苹果','供货商1');
    insert into t2 values('香蕉','供货商2');
    insert into t2 values('橘子','供货商3');
    commit;
    create table t3
    (
    id varchar(100),
    squ varchar(10),
    gname varchar(100)
    )insert into t3 values('水壶','00','供货商1');
    insert into t3 values('杯子','01','供货商12');
    insert into t3 values('铅笔','02','供货商13');
    commit;        select t1.*,
                   (case
                     when t1.typeshop = 1 then
                      (select t2.gname from t2 where t1.name = t2.id)
                     else
                      (select t3.gname from t3 where t1.name = t3.id(+) || t3.squ(+))
                   end) as gname
              from t1
    这个应该可以,,,数量字段用了一个KEY....汗,不好意思,呵呵
      

  4.   

    select t2.gname from t2 where t1.name = t2.id 这个忘记加(+)了......
      

  5.   

    Oracle SQL:
    SELECT  订单号,物品,数量,供货商
    FROM 进货记录表,水果表
    WHERE case when type=1 then 进货记录表.物品 = 水果表.ID(+)
    when type=2 then  进货记录表.物品 = 日常用品表.ID(+) || 日常用品表.序列号(+) end
    and 供货商 = @cutomer
    /