select RestaurantInfo.* from C_RI join Cuisine on C_RI.C_ID = Cuisine.C_ID inner join RestaurantInfo on RestaurantInfo.RI_ID = C_RI. RI_ID or RestaurantInfo.RI_RIName =  RestaurantInfo.RI_RIName or RestaurantInfo.RI_Address = RestaurantInfo.RI_Address 
where CONTAINS(Cuisine.C_Name,'飞')or CONTAINS(RestaurantInfo.RI_RIName,'飞')or CONTAINS(RestaurantInfo.RI_Address,'飞')
RestaurantInfo表是饭店信息表
Cuisine 表是菜系表
C_RI 表是饭店信息和菜系的关联表
因为一个饭店可能既有川菜也有鲁菜
所以加了个关联表
里面存储的是饭店的ID和菜系的ID
查询菜系的名称显示该菜系的所有饭店
或者查询饭店的名称和地址
都能显示出数据
现在也能显示出数据
但是数据过多
以上面我差出来的数据说
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
飞 石家庄飞
飞 石家庄飞
飞 石家庄飞
飞 石家庄飞
飞 石家庄飞
飞 石家庄飞
飞 石家庄飞
飞 石家庄飞
飞 石家庄飞
飞 石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
的确能查出饭店名称和地址中带“飞”这个关键字的数据
但是应该显示的只有3条
现在等于是每条都显示了10遍
谁能帮我解决下啊

解决方案 »

  1.   

    把你的这个
    or RestaurantInfo.RI_RIName =  RestaurantInfo.RI_RIName 
    or RestaurantInfo.RI_Address = RestaurantInfo.RI_Address
    去掉先试试
      

  2.   

    加个 distinct
    select distinct RestaurantInfo.* 
    from C_RI join Cuisine on C_RI.C_ID = Cuisine.C_ID 
    inner join RestaurantInfo 
    on RestaurantInfo.RI_ID = C_RI. RI_ID 
    or RestaurantInfo.RI_RIName =  RestaurantInfo.RI_RIName 
    or RestaurantInfo.RI_Address = RestaurantInfo.RI_Address
    where CONTAINS(Cuisine.C_Name,'飞')or CONTAINS(RestaurantInfo.RI_RIName,'飞')or CONTAINS(RestaurantInfo.RI_Address,'飞')
      

  3.   

    or RestaurantInfo.RI_RIName =  RestaurantInfo.RI_RIName 
    or RestaurantInfo.RI_Address = RestaurantInfo.RI_Address 
    这个去掉的话就只查出饭店名称中带"飞"的数据
    但是也是一条数据显示了5遍
    2 澳门豆捞飞 谈固西街
    2 澳门豆捞飞 谈固西街
    2 澳门豆捞飞 谈固西街
    2 澳门豆捞飞 谈固西街
    2 澳门豆捞飞 谈固西街
      

  4.   

    加上distinct 以后菜系的查询有问题
    我查带“闽”的菜系
    结果所有饭店的信息就全部列出来了
      

  5.   

    如果列数的值全相同,可以用DISTINCT 如果不同看你有什么需求,去除重复记录太多帖子了
      

  6.   

    select distinct RestaurantInfo.* 
    from C_RI join Cuisine on C_RI.C_ID = Cuisine.C_ID 
    inner join RestaurantInfo 
    on RestaurantInfo.RI_ID = C_RI. RI_ID 
    or RestaurantInfo.RI_RIName =  RestaurantInfo.RI_RIName 
    or RestaurantInfo.RI_Address = RestaurantInfo.RI_Address
    where CONTAINS(Cuisine.C_Name,'闽')or CONTAINS(RestaurantInfo.RI_RIName,'固')or CONTAINS(RestaurantInfo.RI_Address,'固')关联表
    3 CRI_ID int 4 0
    0 RI_ID int 4 0
    0 C_ID int 4 0菜系表
    3 C_ID int 4 0
    0 C_Name varchar 20 0
    0 F_ID int 4 0饭店信息表有用的字段3 RI_ID int 4 0
    0 RI_RIName varchar 50 0
    0 RI_Address varchar 100 0
      

  7.   

    这个数据给得..
    应该这样给
    表1
    a  b   c
    1  2   3
    4  5   6表2
    a  b   c
    1  2   3
    4  5   6再说出你要的结果和一些计算方法
      

  8.   

    关联表
    CRI_ID  RI_ID  C_ID
    1         1      1
    2         1      2
    3         2      3
    4         2      4菜系表
    C_ID    C_NAME    
    1         川菜       
    2         粤菜
    3         鲁菜
    4         湘菜
    饭店信息表
    RI_ID     RI_RIName   RI_Address 
    1           湘君府     石家庄市跃进路
    2           保定会馆   石家庄市广安街   
      

  9.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(小F,向高手学习)
    -- Date    :2009-12-25 20:49:46
    -- Version:
    --      Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
    -- Nov 24 2008 13:01:59 
    -- Copyright (c) 1988-2005 Microsoft Corporation
    -- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:[关联表]
    if object_id('[关联表]') is not null drop table [关联表]
    go 
    create table [关联表]([CRI_ID] int,[RI_ID] int,[C_ID] int)
    insert [关联表]
    select 1,1,1 union all
    select 2,1,2 union all
    select 3,2,3 union all
    select 4,2,4
    --> 测试数据:[菜系表]
    if object_id('[菜系表]') is not null drop table [菜系表]
    go 
    create table [菜系表]([C_ID] int,[C_NAME] varchar(4))
    insert [菜系表]
    select 1,'川菜' union all
    select 2,'粤菜' union all
    select 3,'鲁菜' union all
    select 4,'湘菜'
    --> 测试数据:[饭店信息表]
    if object_id('[饭店信息表]') is not null drop table [饭店信息表]
    go 
    create table [饭店信息表]([RI_ID] int,[RI_RIName] varchar(8),[RI_Address] varchar(14))
    insert [饭店信息表]
    select 1,'湘君府','石家庄市跃进路' union all
    select 2,'保定会馆','石家庄市广安街'
    --------------开始查询--------------------------
    select
     c.RI_RIName,c.RI_Address 
    from
     关联表 a,菜系表 b,饭店信息表 c
    where
     a.C_ID=b.C_ID and a.RI_ID=c.RI_ID
    and
     a.CRI_ID=(select min(CRI_ID) from 关联表 where RI_ID=a.RI_ID)
    ----------------结果----------------------------
    /* RI_RIName RI_Address
    --------- --------------
    湘君府       石家庄市跃进路
    保定会馆      石家庄市广安街(2 行受影响)
    */
      

  10.   

    select distinct RestaurantInfo.* 
    from C_RI join Cuisine on C_RI.C_ID = Cuisine.C_ID 
    inner join RestaurantInfo 
    on RestaurantInfo.RI_ID = C_RI. RI_ID 
    or RestaurantInfo.RI_RIName = null
    or RestaurantInfo.RI_Address = null
    where CONTAINS(Cuisine.C_Name,'鲁菜')or CONTAINS(RestaurantInfo.RI_RIName,'鲁菜')or CONTAINS(RestaurantInfo.RI_Address,'鲁菜') 
    这样写
    查菜系没问题出来的数据是对的
    但是按名称和地址查询就不对了