Sql 如何获取值列表以及所有相关信息?

Sql 如何获取值列表以及所有相关信息?,sql,Sql,我在SQL server数据库中有以下表: [ANIMALS] [COLORS] ID | NAME ID | NAME 1 Cow 1 Blue 2 Chicken 2 Red 3 Pig 3 Green 4 T-Rex 4 Pink 5 Orange [RELATI

我在SQL server数据库中有以下表:

[ANIMALS]            [COLORS]
ID | NAME            ID | NAME
 1   Cow              1   Blue
 2   Chicken          2   Red
 3   Pig              3   Green
 4   T-Rex            4   Pink
                      5   Orange

  [RELATIONSHIPS]         
ANIMAL ID | COLOR ID  
    1          3
    1          2
    1          5
    2          1
    3          1
    3          4
    4          1
    4          2
    4          5
我正在尝试编写一个SQL查询,它将返回动物列表以及它们各自的颜色。我试图实现的目标如下所示:

  ANIMAL NAME     COLORS
     Cow            Green/ Red / Orange
     Chicken        Blue
     Pig            Blue/ Pink
     T-Rex          Blue/ Red/ Orange              
我已经有了一个用户定义的函数,它将创建一个名为udf_discrime_Colors(@animalID)的分隔字符串(“color/color/etc”)-@animalID是该udf中唯一的参数

我只能通过传球回到一排,现在我很困惑,我该如何在不传球的情况下实现我的目标

可以在以下链接中找到分隔的SQL查询:

+给写这封信的人写信

我还在努力,所以如果我弄明白了,我会发布答案。
提前感谢您的投入

根据上面的语法,我假设SQL Server是数据库。可以通过以下方式连接字符串:

SELECT a.name,
  LEFT(colors , LEN(colors)-1) colors 
FROM animals a
CROSS APPLY
(
    SELECT c.name + ' / '
    FROM colors c
    left join relationships r
      on c.id = r.[COLOR ID]
    where a.id = r.[ANIMAL ID]
    FOR XML PATH('')
) m (colors)

或:

结果是:

|    NAME |                COLORS |
-----------------------------------
|     Cow | Red / Green / Orange  |
| Chicken |                 Blue  |
|     Pig |          Blue / Pink  |
|   T-Rex |  Blue / Red / Orange  |

您使用的是什么关系数据库?很好的连接交叉应用+XML路径。出于好奇,标记为+1。在你使用的两条路线中,我什么时候应该使用哪一条?使用第一个示例(交叉应用)和第二个示例(东西)以及第二个示例(东西)的好处是什么?@sQuijeW两者之间没有真正的区别。我只是展示了如何做它的替代版本。因为在你用那个解决方案把它炸毁之后,我还在寻找它!
|    NAME |                COLORS |
-----------------------------------
|     Cow | Red / Green / Orange  |
| Chicken |                 Blue  |
|     Pig |          Blue / Pink  |
|   T-Rex |  Blue / Red / Orange  |