表格中记录所有有危险的动物,如果不包括的动物则为完全动物  危险性
狼    危险
熊    危险请问如何设计结构与查询语句,使查询某一动物时,返回是否完全,比如查询熊,则返回
熊    危险查询  猫,在表中没有,则返回
猫    安全

解决方案 »

  1.   

    问题在于,业务逻辑上要求只要不在表中的,便是安全的(不管事实是否安全),这样怎么写SQl啊!请高手教我
      

  2.   

    strsql=" select 危险性 from A where 动物='"& text1.text &"'"
    if rs.stateclosed then rs.close
    rs.open strsql,conn,adopenkeyset,adlockreadonly
    if rs.recordcount>0 then
        msgbox text1.text & space(2) & rs!危险性 &""
    else
        msgbox text1.text & space(2) & "安全"
    end if
    rs.close
      

  3.   

    能否用一个Sql语句搞定,以方便进行复杂的关联,vb代码不合要求。
      

  4.   


    如果是这样,没有关联表,直接用SQL语句的思路可以:
    select count(动物) as c from tb where 动物='猫' 
    然后在程序中判断,c返回0,就是安全... 
      

  5.   

    t_animal
    ID 动物 危险
    1 熊 1
    2 虎 1
    3 蛇 1
    4 猫 0rs.open " select * from t_animal where 危险 = 1 "
    if rs.recordcount = 0 then msgbox "丫是安全的!"PS:不高效..
      

  6.   

    加个函数,SQL数据库用case,ACCESS用iif:select (case when count(动物)=0 then '安全' else 危险 end) as 危险性 from tb where 动物='猫' 
      

  7.   

    select (case when count(动物)=0 then '安全' else '危险' end) as 危险性 from tb where 动物='猫' 
      

  8.   

    楼上的查询结果没有动物名啊!怎么关联。更关键的是,表中还有极度危险这样的项。(为了让问题更简单,我把它约去了,反而增加麻烦对不起了!)
    真正的表是熊  极度危险
    狼  危险
    虎  极度危险
    菜花蛇  轻度危险要求sql完成以下任务,知道某动物名,如果在表中有该名,则返回狼  危险
    如果无该名则返回
    猫  安全总之,返回表要有两个字段,一是动物名,二是安全性。而安全性在表1中查,查不到就是安全。 而且要在sql中直接完成。因为类似的表有六七个,需要关联起来。
      

  9.   

    呵呵,我在VBMAN的基础上改一点:select 动物, (case when count(动物)=0 then '安全' else '危险' end) as 安全性 from tb where 动物='猫' 
      

  10.   

    有一个叫运价的表!有很多字段,如安全性类别,目的站类别,代理类别等,在实际运用中,每个字段都要别的表中查。比如代理类别,查类别表(没查到就是普通代理);
    安全性类别,就查危险性表(没查到就是安全);
    目的站类别,就查目的站表,没查到就是实际目的站,查到了就是特殊组名,本来直接将这样表关联起来,就可以用  where 安全性类别='安全',代理类别='普通',目的站类别='云南组' 这样的sql语句查到运价了。(可能有多条可用值)
    问题在于
    1、结构要求未查到的数据给一个默认值,有的就是数据本身,有的是固定的,这怎么处理啊!
    2、不用关联很难处理,因为有些表的查询都可以给出多个值。用一个七重循环查无数次Sql不现实的说,而且最后还要给出可用运价条目列表,难道还要一一合并? 
      

  11.   

    13楼的语句在access中不行,(已改为iif),
      

  12.   

    原来你用ACCESS啊,HAND,俺天天用它呢。
      

  13.   


    据说ACCESS里只有参数查询,没有存储过程。
      

  14.   


    strsql=" select 危险性 from A where 动物='"& text1.text &"'"
    if rs.stateclosed then rs.close
    rs.open strsql,conn,adopenkeyset,adlockreadonly
    if rs.recordcount>0 then
        msgbox text1.text & space(2) & rs!危险性 &""
    else
        msgbox text1.text & space(2) & "安全"
    end if
    rs.close
    这个怎么不符合要求了? 挺好的阿
      

  15.   


    任务是做一个自动运价查询系统,输入各参数,(日期,代理,货物,重量,目的站,终点站,航班号,机型等等),返回可用的运价条目。
    现在卡住了,举个简化的例子,忽略其它参数。运价规定。(注:除有指定分组外都是普通代理,且不可能将代理名全部记录在数据库)
    普通代理           1元/公斤     
    代理组A          0.5元/公斤
    代理组B          0.2元/公斤现在如果能用Sql语句在代理表中生成一个形如
    代理名    普通代理
    代理名    代理组A   
    表,就可以用关联方式生成可用运价表了运价查询结果有2条(注:代理可选择不采用优惠,成为普通代理)
    普通代理   1元/公斤
    代理组A    0.5元/公斤在程序中用判断不可行,一个参数还好,因为有很多参数,那将导致七重循环查数据库,问题就在于没有数据返回默认值怎么写啊!
      

  16.   

    另外,教你一个列字段的简单办法。
    (1)你在ACCESS里选工具-》关系。
    (2)然后把你所有的表都拖进去。
    (3)把每个表的高度调到把所有字段都显出来
    (4)拷屏
    (5)把图片传上来
    (6)OK
      

  17.   

    太多了!写出来大家看起来也麻烦,再说我还在想怎么改结构呢!我就想知道有没有办法一个sql查出各参数的类别!
      

  18.   

    恩,先说句你不爱听的哈。我觉得你的需求其实可能也许或者maybe and perhaps是没必要滴。其实,你计算运价的话,不需要一个SQL搞定。我就是分头从7个表里得到相应的数据,然后根据一定的公式算出运价,有什么不可以么?用户查运价也不可能一下子输入一大堆查询吧?毕竟用户要把一个运单跟系统交待清楚也得费半天劲呢。所以,用户每次也就是问系统一个问题,对性能要求没那么高啊。你就别这儿较劲了吧
      

  19.   

    你用一条SQL来计算运价,又用的ACCESS,有以下弊端:(1)ACCESS不支持存储过程。所以你用一条复杂的SQL,如果编出来的话,估计效率也不比你用多条好到哪儿去。
    (2)你的程序的可维护性和可扩展性会比较的低。试想,如果日后你的业务逻辑有些微的变动,你都得费老鼻子劲取看那个复杂得吓死人的长SQL。一不小心错个括号都能害你一晚上找不出来哪里不对(因为可能有错的地方太多了,而且SQL调起来又没有VB那么简单)。
      

  20.   


    (1)“参数类别表查出多个值”是什么意思?(2)“七重循环”?没看出来有这个后果啊?(3)怎么会产生两个可用运价呢?一个运单会有明确的规定,是用代理还是不用代理。没说用不用代理的,系统统一按不用代理算。怎么会有两个运价呢?
    同理,所有其他可能影响价格的因素,用户提交的运单里应该都有明确说明,否则就按缺省值处理。每个因素都是唯一明确的。得到每个因素的确定值之后,直接代到公式里算,就可以得到明确的运价。大致计算过程如下:查询1:得到因子1的具体值X1;
    查询2:得到因子2的具体值X2:
    ……
    查询7:得到因子7的具体值X7。代入计算公式,假设运算公式是f(),那么运价就等于f(X1,X2, ……, X7)也就是:这7个互不相干的因子可以分别去取值,没有嵌套循环的必要
      

  21.   

    你的问题如果想用一句SQL语句搞定,以我的能力感觉是不可能的....
    要不你发到ACCESS版去试试,那边SQL语句高手比较多...
      

  22.   

    回复31楼,因为x1可能为多个值,x2也可能,根据你的建议,我想更改结构,使x1最多只有2个值,x2也一样,其他也一样。
      

  23.   

    太高兴了,问题解决,多谢搜索引擎,多谢各位朋友。下面是带默认值的查询的写法,大家斧正
    注:ID =1的记录专为写查询而写的空记录。
    比如查询长沙的组名,SELECT TOP 1 * 
    FROM (SELECT 组名
    FROM 组目的站
    WHERE and 目的站='长沙'
    UNION SELECT "长沙"  as 组名
    FROM 组目的站
    WHERE ID=1)
      

  24.   

    刚才研究了一下你那个关于动物的SQL语句,你可以在表中建立一个参数查询,或者在程序中构造SQL语句用变量替代下面的参数@1:
    select a.动物,iif(a.c=0,'安全',b.危险性) as 危险性
    from (select @1 as 动物,count(动物) as c from tb where 动物=@1) a 
         left join (select 动物,危险性,count(动物) as c from tb group by 动物,危险性) b 
    on a.动物=b.动物 and a.c=b.c
    where a.动物=@1
      

  25.   

    x1一定会对应多个值的,x2也会,实例如下。普通代理   长沙  普通类     3元
    代理组A   长沙  海鲜皮鞋类  2元普通代理   北京  普通类 2元
    代理组B   北京  服装类  1元
    普通代理   天津  普通类 1元
    代理组C   天津  皮鞋类  0.5元
    一看就知道,这是针对特殊站点的特殊货物且特殊代理有特殊运价。
    则货物类表的设计为皮鞋   海鲜皮鞋类
    皮鞋   皮鞋类
    服装   服装类看到了吗。多值就出来了。而且理论上说,几乎所有参数都可以多值
      

  26.   


    感觉参数这样定义不是很合理。东西都鸟在一起,有点混乱的说。比如你现在举出的这个X1就是站点、货物、代理鸟在一起,你自己都无法用一个词来定义它。不知你能否从中总结出规律?比如:(1)所有货物都有基本运价:basicPrice(单位为:元/吨×公里)。就是重量一定、运输距离一定的运单的基本运价都是相同的。
    (2)代理因子:如果用代理A,在基本运价上打八折;如果用代理B,在基本运价基础上打九折。
    (3)目的站点因子:如果目的地是特别站点,在基本运价上每吨每公里加多少元。(可以查目的站点表,每个站点都有明确的值)
    (4)种类因子:如果货物种类是特别种类,在基本运价上每吨每公里加多少元。(这个也到表里去查)总而言之,感觉你的运价计算模型有点衰,呵呵
      

  27.   

    Select A.动物,Isnull(B.危险性,'安全') from  (Select '猫'  as [动物]) as A left join 表 B
    on  A.动物=B.动物
      

  28.   

    其实默认值不难的,可以用case或者isnull,但问题是:按你说的,只能以动物表为主表.可是left join和inner join,还是right join..都有一定的局限性.查询语句要做它本来不该做的事.初始化时运送货物时,必须默认运价信息.这样查询时,可以减少问题.