显示在单独的表中相互链接的数据

时间:2013-09-26 01:30:02

标签: sql sql-server

我是新手,所以如果我不以最好的方式提出这个问题我会道歉。 假设我有两个表:一个叫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 与其他猫相对应,等等。)

我希望这是有道理的,请问我是否需要澄清。 我只想运行一个语句来检索和汇总这些数据,而不是修改或更改任何表。

4 个答案:

答案 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