我是新手,所以如果我不以最好的方式提出这个问题我会道歉。
假设我有两个表:一个叫CatColours
,一个叫Cats
CatColours
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
CatColours 表中的 id 是主键,颜色列的值对应 id 号码。
在第二个表 Cats 中,我们有 cat_names 以及 id 这将是一个外键(如果我错了请纠正我)
我想撰写一个查询,在第二个表 Cats 中将 id 显示为颜色,从第一个表 CatColours < / em>其中数据仍然对应正确的猫
(即 CatColours 中的 id 1对应于值BROWN以及 spot ,但是我并不关心自己的值目前点。 Cats 中的 id 1对应于JIMMY。
当我查询时,我想在第二个表 Cats 中将 id 1显示为BROWN cat_name id 与其他猫相对应,等等。)
我希望这是有道理的,请问我是否需要澄清。 我只想运行一个语句来检索和汇总这些数据,而不是修改或更改任何表。
答案 0 :(得分:2)
我认为你只是在寻找一个简单的连接:
SELECT CatColours.id, Cats.cat_name, CatColours.colour
FROM CatColours
INNER JOIN Cats ON CatColours.id = Cats.id
here's a SQL Fiddle to demonstrate。
有关联接的更多信息,另请参阅:
老实说,虽然我会改变FK关系并使Cats(及其名字)成为父表。
答案 1 :(得分:0)
尝试
SELECT C.id, C.cat_name, CC.colour, CC.spots
FROM cats C
INNER JOIN CatColours CC ON
C.id = CC.id
答案 2 :(得分:0)
根据您的要求,Cats表是主表,CatsColor是关联表。 Cats.id是Cats的主键,CatsColor.id将是引用表Cats中的Cats.id的外键。
查询将是
SELECT cc.color,c.cat_name 来自Cats c INNER JOIN CatColours cc ON c.id = cc.id
答案 3 :(得分:0)
如果您只想从现有表中获取数据,则可以使用已发布的任何查询。
请注意,您的表格组织得不是很好。
你怎么能代表一只名叫吉米的猫,它是棕色的,没有斑点? 此外,请注意您的CatColors表包含冗余数据,因为cat可以使用我们没有斑点的一种颜色,因此您输入的dta超出了您的需要
我建议你像这样修理你的表
CatColors
id color
1 brown
2 white
3 black
4 organge
5 gray....
猫
id name color_id spots
1 Jimmy 1 1
2 Shadow 2 0
3 Lucky 2 1
这是一个很好的教程,你可以阅读关于表格规范化的内容,它将为你提供一些关于这个
的理论背景知识http://dotnetanalysis.blogspot.com/2012/01/database-normalization-sql-server.html