2

我是新手,所以如果我没有以最好的方式提出这个问题,我深表歉意。假设我有两张桌子:一张叫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_namesid这将是一个外键(如果我错了,请纠正我)。

我想编写一个查询,将第二个表Cats中的id显示为第一个表CatColours中的颜色,其中数据仍将对应于正确的猫 (即CatColours中的id 1对应于值 BROWN 以及,但是我现在并不关心下的值。Cats中的id 1对应于 JIMMY。 当我查询时,我想在第二个表 Cats 中将 id 1 显示为BROWNidcat_name

对应于,其余的猫依此类推。)

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

4

4 回答 4

2

I think you are just looking for a simple join:

SELECT CatColours.id, Cats.cat_name, CatColours.colour
FROM CatColours
INNER JOIN Cats ON CatColours.id = Cats.id

And here's a SQL Fiddle to demonstrate.

For more information on joins, see also:


Honestly though I would switch the FK relationship around and make Cats (with their names) be the parent table.

于 2013-09-26T01:34:08.727 回答
0

如果您只想从现有表中获取数据,您可以使用任何已经发布的查询。

请注意,您的表格组织得不是很好。

你会如何代表一只名叫吉米的猫,它是棕色的,没有斑点?另外,请注意您的 CatColors 表包含冗余数据,因为 cat 可以有一种颜色而我们没有斑点,因此您输入的 dta 比您需要的多

我建议你像这样修理你的桌子

猫颜色

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

于 2013-09-26T13:53:10.043 回答
0

尝试

 SELECT C.id, C.cat_name, CC.colour, CC.spots
 FROM cats C
 INNER JOIN CatColours CC ON
 C.id = CC.id
于 2013-09-26T01:38:56.607 回答
0

根据您的要求,Cats 表是主表,CatsColor 是关联表。Cats.id 是 Cats 的主键,CatsColor.id 将是引用 Cats 表中 Cats.id 的外键。

查询将是

SELECT cc.color, c.cat_name FROM Cats c INNER JOIN CatColours cc ON c.id = cc.id

于 2013-09-26T01:44:19.283 回答