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遍
谁能帮我解决下啊
where CONTAINS(Cuisine.C_Name,'飞')or CONTAINS(RestaurantInfo.RI_RIName,'飞')or CONTAINS(RestaurantInfo.RI_Address,'飞')
RestaurantInfo表是饭店信息表
Cuisine 表是菜系表
C_RI 表是饭店信息和菜系的关联表
因为一个饭店可能既有川菜也有鲁菜
所以加了个关联表
里面存储的是饭店的ID和菜系的ID
查询菜系的名称显示该菜系的所有饭店
或者查询饭店的名称和地址
都能显示出数据
现在也能显示出数据
但是数据过多
以上面我差出来的数据说
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
澳门豆捞飞 谈固西街
飞 石家庄飞
飞 石家庄飞
飞 石家庄飞
飞 石家庄飞
飞 石家庄飞
飞 石家庄飞
飞 石家庄飞
飞 石家庄飞
飞 石家庄飞
飞 石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
石家庄飞
的确能查出饭店名称和地址中带“飞”这个关键字的数据
但是应该显示的只有3条
现在等于是每条都显示了10遍
谁能帮我解决下啊
or RestaurantInfo.RI_RIName = RestaurantInfo.RI_RIName
or RestaurantInfo.RI_Address = RestaurantInfo.RI_Address
去掉先试试
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,'飞')
or RestaurantInfo.RI_Address = RestaurantInfo.RI_Address
这个去掉的话就只查出饭店名称中带"飞"的数据
但是也是一条数据显示了5遍
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
我查带“闽”的菜系
结果所有饭店的信息就全部列出来了
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
应该这样给
表1
a b c
1 2 3
4 5 6表2
a b c
1 2 3
4 5 6再说出你要的结果和一些计算方法
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 保定会馆 石家庄市广安街
-- 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 行受影响)
*/
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,'鲁菜')
这样写
查菜系没问题出来的数据是对的
但是按名称和地址查询就不对了