我有一个存储过程需要从同一个 table 中提取信息两次。如何使用关联名称?
I have a stored procedure that needs to pull info from the same table twice. How do I use Correlation Names?
我正在为游戏 Doodle Creatures 创建一个游戏作弊页面。我创建的 table 使用 Combo Animal 的 ID、与它组合的 Gene 以及来自 Animals table 的 New animal 的 ID 来显示信息。 table 看起来像这样:
Creature Combos Table:
ComboID (PK) | NewAnimalID (FK) | ComboAnimalID (FK) | GeneID (FK) |
我创建的 select 来自 Combos table 记录的过程通过加入 Animal 和 Genes table 使用关于组合动物、基因和新动物的信息填充我的数据列表s 基于组合、新动物和基因的 ID。:
CREATE PROCEDURE [dbo].[SelectCreatureCombos]
AS
SELECT * FROM [CreatureCombos]
INNER JOIN [Animals] ON [CreatureCombos].[NewCreatureID] = [Animals].[AnimalId]
INNER JOIN [Animals] ON [CreatureCombos].[ComboAnimalID] = [Animals].[AnimalId]
INNER JOIN [Genes] ON [CreatureCombos].[ComboGeneID] = [Genes].[GeneId] ;
程序的预期结果:
(New) Animal (Name) | AnimalImg | AnimalAltText | AnimalToolTip | (Combo) Animal (name) | AnimalImg | AnimalAltText | AnimalToolTip | Gene | GeneImg | GeneAltText | GeneToolTip |
当我 运行 页面时,出现以下错误:
The objects "Animals" and "Animals" in the FROM clause have the same exposed names. Use correlation names to distinguish them.
我必须承认我对SQL还是有点陌生;我可以像专业人士一样插入、select 和更新,但连接、别名和相关名称有点超出我的能力范围。任何其他建议将不胜感激。谢谢!
如果是这种情况,您需要做的就是在 table 名称上提供一个 ALIAS
以避免名称冲突。例如
SELECT *
FROM [CreatureCombos]
INNER JOIN [Animals] AS Animal1
ON [CreatureCombos].[NewCreatureID] = Animal1.[AnimalId]
INNER JOIN [Animals] AS Animal2
ON [CreatureCombos].[ComboAnimalID] = Animal2 .[AnimalId]
INNER JOIN [Genes]
ON [CreatureCombos].[ComboGeneID] = [Genes].[GeneId]
我认为 table design.In [CreatureCombos] 中存在问题删除了列 [NewCreatureID] 和 [ComboAnimalID]。添加一列调用 AnimalID 和第二列作为 AnimalType int( 1,2等)
所以在这个设计中只有一个 Animal1 join 并且你可以通过类型识别 AnimalType。
此外,如果有更多的动物类型或类别,那么您会怎么做?
所以推荐设计更加灵活开放的类型。
我正在为游戏 Doodle Creatures 创建一个游戏作弊页面。我创建的 table 使用 Combo Animal 的 ID、与它组合的 Gene 以及来自 Animals table 的 New animal 的 ID 来显示信息。 table 看起来像这样:
Creature Combos Table:
ComboID (PK) | NewAnimalID (FK) | ComboAnimalID (FK) | GeneID (FK) |
我创建的 select 来自 Combos table 记录的过程通过加入 Animal 和 Genes table 使用关于组合动物、基因和新动物的信息填充我的数据列表s 基于组合、新动物和基因的 ID。:
CREATE PROCEDURE [dbo].[SelectCreatureCombos]
AS
SELECT * FROM [CreatureCombos]
INNER JOIN [Animals] ON [CreatureCombos].[NewCreatureID] = [Animals].[AnimalId]
INNER JOIN [Animals] ON [CreatureCombos].[ComboAnimalID] = [Animals].[AnimalId]
INNER JOIN [Genes] ON [CreatureCombos].[ComboGeneID] = [Genes].[GeneId] ;
程序的预期结果:
(New) Animal (Name) | AnimalImg | AnimalAltText | AnimalToolTip | (Combo) Animal (name) | AnimalImg | AnimalAltText | AnimalToolTip | Gene | GeneImg | GeneAltText | GeneToolTip |
当我 运行 页面时,出现以下错误:
The objects "Animals" and "Animals" in the FROM clause have the same exposed names. Use correlation names to distinguish them.
我必须承认我对SQL还是有点陌生;我可以像专业人士一样插入、select 和更新,但连接、别名和相关名称有点超出我的能力范围。任何其他建议将不胜感激。谢谢!
如果是这种情况,您需要做的就是在 table 名称上提供一个 ALIAS
以避免名称冲突。例如
SELECT *
FROM [CreatureCombos]
INNER JOIN [Animals] AS Animal1
ON [CreatureCombos].[NewCreatureID] = Animal1.[AnimalId]
INNER JOIN [Animals] AS Animal2
ON [CreatureCombos].[ComboAnimalID] = Animal2 .[AnimalId]
INNER JOIN [Genes]
ON [CreatureCombos].[ComboGeneID] = [Genes].[GeneId]
我认为 table design.In [CreatureCombos] 中存在问题删除了列 [NewCreatureID] 和 [ComboAnimalID]。添加一列调用 AnimalID 和第二列作为 AnimalType int( 1,2等)
所以在这个设计中只有一个 Animal1 join 并且你可以通过类型识别 AnimalType。
此外,如果有更多的动物类型或类别,那么您会怎么做?
所以推荐设计更加灵活开放的类型。