【问题标题】:SQL Conditional Select StatementSQL 条件选择语句
【发布时间】:2010-02-26 02:44:33
【问题描述】:

我将如何进行以下操作?

给定表格、Recipe、RecipeItem、RecipeInstruction。仅当 Recipe 的 SELECT 语句返回结果时,如何执行 SELECT。

如果 Recipe 存在,则返回 RecipeItems 并返回 RecipeInstructions。

【问题讨论】:

  • 不太清楚你在这里问什么。更详细?
  • 如果配方不存在,SELECT 将不返回任何行。这和“只有Recipe的SELECT语句返回结果”不是一回事吗?
  • 列出一些字段以显示它们如何关联/连接如何?这是任何特定类型的数据库吗?
  • -1 表示信息不足、没有起始代码、没有列、没有字段等。
  • 为什么你选择了两个单独的 sql 语句的答案,它们都只返回子表条目而不是配方表中的详细信息?

标签: sql select conditional


【解决方案1】:

不确定这是否是您要查找的内容,但假设存在关键关系,请选择以下形式的语句:

SELECT ri.* FROM Recipe r
JOIN RecipeItem ri ON ri.RecipeID = r.RecipeID
WHERE r.Name = @myName -- or other criteria

SELECT ris.* FROM Recipe r
JOIN RecipeInstructions ris ON ris.RecipeID = r.RecipeID
WHERE r.Name = @myName -- or other criteria

... 仅当该配方 ID 存在时才会返回配方详细信息。这是使用 SQL 检索子项的标准方法。

【讨论】:

  • 谢谢先生,这正是我想要的。是的,Recipe 是父实体,RecipeItem 和RecipeInstruction 包含recipe 的外键。
【解决方案2】:

你想要一个 INNER JOIN:

SELECT *
FROM Recipe
    INNER JOIN RecipeItem ON RecipeItem.RecipeID = Recipe.RecipeID
    INNER JOIN RecipeInstruction ON RecipeInstruction.RecipeID = Recipe.RecipeID
WHERE Recipe.[Name] = 'the recipe name'

这是假设RecipeItemRecipeInstruction 都有一个名为RecipeID 的外键,将其链接回主Recipe 表。

【讨论】:

    【解决方案3】:

    这是一个开始,但你的问题不清楚:

    Select RI.*
       , RInst.*
    From Recipe AS R
    inner join RecipeItem AS RI
    on R.PK = RI.FK
    inner join RecipeInstruction AS RInst
    on R.PK = RInst.FK
    

    主键 (PK) 需要以某种方式匹配这些表之间的外键 (FK) 字段。我将建议列出一些字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-04
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      相关资源
      最近更新 更多