Sql 在单独的表中显示相互链接的数据
我是个新手,如果我没有以最好的方式问这个问题,我向你道歉。 假设我有两个表:一个叫做Sql 在单独的表中显示相互链接的数据,sql,sql-server,Sql,Sql Server,我是个新手,如果我没有以最好的方式问这个问题,我向你道歉。 假设我有两个表:一个叫做catcolors,另一个叫做Cats id cat_name -- ---- 1 Jimmy 2 Shadow 3 Snowball 4 Lucky catcolors id colour spots -- ----- ----- 1 brown Yes 2 black No 3 white No 4
catcolors
,另一个叫做Cats
id cat_name
-- ----
1 Jimmy
2 Shadow
3 Snowball
4 Lucky
catcolors
id colour spots
-- ----- -----
1 brown Yes
2 black No
3 white No
4 orange Yes
Cats
id cat_name
-- ----
1 Jimmy
2 Shadow
3 Snowball
4 Lucky
因此catcolors表中的id将是主键,列colors的值对应于id编号。在第二个表Cats中,我们有cat_名称以及id,这将是一个外键(如果我错了,请纠正我) 我想组成一个查询,在第二个表Cats中将id显示为color,而第一个表catcolors中的数据仍将对应于正确的cat
(即猫色中的id1对应于棕色和斑点,但我目前并不关心斑点下的值。id1对应于吉米。
当我查询时,我想在第二个表中将id1显示为棕色,以显示id所对应的cat\u名称,以此类推。) 我希望这是有道理的,请问我是否需要澄清。
我只想运行一条语句来检索和汇总这些数据,而不是修改或更改任何表。我想您只是在寻找一个简单的联接:
SELECT CatColours.id, Cats.cat_name, CatColours.colour
FROM CatColours
INNER JOIN Cats ON CatColours.id = Cats.id
和
有关联接的详细信息,请参见:
老实说,我会改变FK关系,让猫(有它们的名字)成为父表。试试看
SELECT C.id, C.cat_name, CC.colour, CC.spots
FROM cats C
INNER JOIN CatColours CC ON
C.id = CC.id
根据您的要求,Cats表是主表,CatsColor是关联表。Cats.id是Cats的主键,CatsColor.id将是引用表Cats中Cats.id的外键 查询将是 选择cc.color、c.cat\U名称 来自猫c
如果只想从现有表中获取数据,可以使用已发布的任何查询 请注意,你们的桌子组织得不是很好 你将如何代表一只名叫吉米的猫,它是棕色的,没有斑点? 另外,请注意,您的CatColors表包含冗余数据,因为cat可以有一种带有我们的无斑点的颜色,所以您输入的dta比您需要的要多 我建议你像这样整理桌子 猫咪
id color
1 brown
2 white
3 black
4 organge
5 gray....
猫
这是一个很好的教程,您可以阅读有关表规范化的内容,它将为您提供一些关于这方面的理论背景