我有这样的表:
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
感谢您的解释和帮助。
答案 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