内连接返回多行

时间:2015-03-09 22:10:11

标签: sql-server database sql-server-2008 server-side

我有这样的表:

Cities
id   CityName
1    NewYork
2    Dubai



Categories
id   CatName
1    Gaming
2    Health


BusinessFullData
id   BusName  BusCity  BusCategory
1    NewYork  1        2
2    Dubai    2        2
3    Germany  1        1
4    Egypt    2        1

我试过这个:

Select distinct Bus.Id,Bus.BusName,Bus.BusCity,Bus.BusCategory From BusinessFullData Bus 
INNER JOIN Categories Cat ON Bus.BusCategory = 1
INNER JOIN Cities Cts ON Bus.BusCity= 1
Where Bus.Id=@Id

但是我得到了多行。我不知道为什么。

我需要的是返回业务数据(使用cityName和CategoryName文本)。通过使用Bus.Id的id

感谢您的解释和帮助。

2 个答案:

答案 0 :(得分:1)

我认为这就是你想要的......这只是我清理了一些示例代码,它对我有用。这很接近吗?

DECLARE @Towns TABLE (id int, TownName varchar(20));
INSERT INTO @Towns (id, TownName)
VALUES (1, 'NewYork'), (2, 'Dubai')

DECLARE @Categories TABLE (id int, CatName varchar(20));
INSERT INTO @Categories (id, CatName)
VALUES (1, 'Gaming'), (2, 'Health')

DECLARE @BusinessFullData TABLE (id int, BusTown int, BusCat int)
INSERT INTO @BusinessFullData (id, BusTown, BusCat)
VALUES (1, 1, 2), (2, 2, 2)

SELECT bus.Id, cat.CatName, twn.TownName, bus.BusTown 
FROM @BusinessFullData bus 
INNER JOIN @Categories cat ON bus.BusCat = cat.id
INNER JOIN @Towns twn ON bus.BusTown = twn.id
WHERE Bus.Id = 2

请注意我只是设置了一些表变量并将测试数据插入其中,以便最终的SELECT工作无需做任何特殊操作。这只是为了尝试将想法传达给您。

注意我删除了多余的城市名称,而是从"城镇中删除了#34;表。同样,我从Categories表中提取Category名称,而不是仅打印整数。

基本上," BusinessFullData"表引用了Towns和Categories表。将它们连接到它们的公共索引(BusTown到Towns.id,以及BusCat到Categories.id)将所有数据组合在一起,过滤器根据业务ID选择一行。

答案 1 :(得分:0)

如果我正确理解了您的问题,这应该会对您有所帮助:

Select distinct Bus.Id,Bus.BusName,Bus.BusCity,Bus.BusCategory From BusinessFullData Bus 
INNER JOIN Categories Cat ON Bus.BusCategory = Cat.Id
INNER JOIN Cities Cts ON Bus.BusCity= Cts.Id
Where Bus.Id=@Id
AND Bus.BusCategory = 1
AND Bus.BusCity= 1