一个SQL语句的问题 查出数据重复

z328583143 2009-12-25 06:28:25
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遍
谁能帮我解决下啊
...全文
422 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
z328583143 2009-12-25
  • 打赏
  • 举报
回复
我就是用的or
--小F-- 2009-12-25
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 z328583143 的回复:]
现在值不是重复 是这样差地址或饭店名称的时候要不值查名称要不只查地址 而不是两个的都显示
[/Quote]
用 or
z328583143 2009-12-25
  • 打赏
  • 举报
回复
现在值不是重复 是这样差地址或饭店名称的时候要不值查名称要不只查地址 而不是两个的都显示
--小F-- 2009-12-25
  • 打赏
  • 举报
回复
看14楼 去掉重复值
z328583143 2009-12-25
  • 打赏
  • 举报
回复
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,'鲁菜')
这样写
查菜系没问题出来的数据是对的
但是按名称和地址查询就不对了
--小F-- 2009-12-25
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- 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 行受影响)
*/
z328583143 2009-12-25
  • 打赏
  • 举报
回复
关联表
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 保定会馆 石家庄市广安街
--小F-- 2009-12-25
  • 打赏
  • 举报
回复
这个数据给得..
应该这样给
表1
a b c
1 2 3
4 5 6

表2
a b c
1 2 3
4 5 6

再说出你要的结果和一些计算方法
z328583143 2009-12-25
  • 打赏
  • 举报
回复
那位大哥大姐帮帮忙啊
z328583143 2009-12-25
  • 打赏
  • 举报
回复
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
SQL77 2009-12-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 z328583143 的回复:]
or RestaurantInfo.RI_RIName =  RestaurantInfo.RI_RIName
or RestaurantInfo.RI_Address = RestaurantInfo.RI_Address
这个去掉的话就只查出饭店名称中带"飞"的数据
但是也是一条数据显示了5遍
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街

[/Quote]
如果列数的值全相同,可以用DISTINCT 如果不同看你有什么需求,去除重复记录太多帖子了
z328583143 2009-12-25
  • 打赏
  • 举报
回复
不行啊 那查菜系的时候就全错了
bancxc 2009-12-25
  • 打赏
  • 举报
回复
我晕
帖出测试数据及结果 大家帮你写
bancxc 2009-12-25
  • 打赏
  • 举报
回复
那就加个distinct得了

z328583143 2009-12-25
  • 打赏
  • 举报
回复
加上distinct 以后菜系的查询有问题
我查带“闽”的菜系
结果所有饭店的信息就全部列出来了
z328583143 2009-12-25
  • 打赏
  • 举报
回复
or RestaurantInfo.RI_RIName = RestaurantInfo.RI_RIName
or RestaurantInfo.RI_Address = RestaurantInfo.RI_Address
这个去掉的话就只查出饭店名称中带"飞"的数据
但是也是一条数据显示了5遍
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
bancxc 2009-12-25
  • 打赏
  • 举报
回复
加个 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,'飞')
bancxc 2009-12-25
  • 打赏
  • 举报
回复
把你的这个
or RestaurantInfo.RI_RIName = RestaurantInfo.RI_RIName
or RestaurantInfo.RI_Address = RestaurantInfo.RI_Address
去掉先试试
z328583143 2009-12-25
  • 打赏
  • 举报
回复
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
2 澳门豆捞飞 谈固西街
3 飞 石家庄飞
3 飞 石家庄飞
3 飞 石家庄飞
3 飞 石家庄飞
3 飞 石家庄飞
3 飞 石家庄飞
3 飞 石家庄飞
3 飞 石家庄飞
3 飞 石家庄飞
3 飞 石家庄飞
4 石家庄飞
4 石家庄飞
4 石家庄飞
4 石家庄飞
4 石家庄飞
4 石家庄飞
4 石家庄飞
4 石家庄飞
4 石家庄飞
4 石家庄飞
5 石家庄飞
5 石家庄飞
5 石家庄飞
5 石家庄飞
5 石家庄飞
5 石家庄飞
5 石家庄飞
5 石家庄飞
5 石家庄飞
5 石家庄飞

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧