Mysql 从另一个表中选择满足约束的所有行

Mysql 从另一个表中选择满足约束的所有行,mysql,sql,Mysql,Sql,我的数据库(MySQL)包含5个表 它应该描述某些行动、状态和约束 要使任何操作可执行,必须满足其所有约束。 每个状态都确保满足某些约束条件: 操作(ID、名称) 州(ID、姓名) 约束(ID、名称) 具有约束(操作ID、约束ID) 确保约束(状态ID、约束ID) 我的问题是:如何选择在给定状态下可执行的所有操作 提前感谢,, Jan您可以使用联接进行选择,我无法从您的示例中说出确切的表模式。 但是,请查看并了解联接,它们将带您去您想要去的地方。我不知道每个表中的列,但是根据您的陈述,我们也可以

我的数据库(MySQL)包含5个表

它应该描述某些行动、状态和约束

要使任何操作可执行,必须满足其所有约束。 每个状态都确保满足某些约束条件:

  • 操作(ID、名称)
  • 州(ID、姓名)
  • 约束(ID、名称)
  • 具有约束(操作ID、约束ID)
  • 确保约束(状态ID、约束ID)
  • 我的问题是:如何选择在给定状态下可执行的所有操作

    提前感谢,,
    Jan

    您可以使用联接进行选择,我无法从您的示例中说出确切的表模式。
    但是,请查看并了解联接,它们将带您去您想要去的地方。

    我不知道每个表中的列,但是根据您的陈述,我们也可以这样做:

    SELECT 
    <columns>
    FROM
    has_constraints `constraint` INNER JOIN actions action ON `constraint`.action_id = action.id
    RIGHT JOIN assure_constraints assure ON assure.constraint_id = `constraint`.id
    WHERE constraint.state_id = <id of state>
    
    选择
    从…起
    在“constraint”上有\u constraint`constraint`内部联接操作操作。操作\u id=action.id
    右连接assure\u约束assure ON assure.constraint\u id=`constraint`.id
    其中constraint.state_id=
    
    如果要从状态表中获取一些列,可以将其添加到from中的join语句中

    SELECT a.*
      FROM actions a
     WHERE NOT EXISTS
           (
       SELECT 1
         FROM has_constraints hc
        WHERE hc.action_id = a.id
          AND NOT EXISTS
              (    
          SELECT 1 
            FROM assure_constraints ac
           WHERE ac.state_id = $my_state_id
             AND ac.constraint_id = hc.constraint_id))
    
    • 检索没有状态不允许的约束的所有操作
    • 包括完全没有约束的操作

    @Matthew Farwell:各种各样的事情,但我有点不懂SQL。只是尝试了一些嵌套选择。顺便说一句,这不是家庭作业。我只是想知道这是一个关系划分问题。尝试搜索:检查以下问题和答案:stackoverflow.com/questions/6523856/newbie-question-n-join-that-matches-all-a-list/和以下内容:以及Celko的文章Divided We Stand:Relational Division的SQL:Nice。我更喜欢
    SELECT*
    inside
    EXISTS
    子查询,但这只是个人偏好。@ypercube:AFAIK
    SELECT 1
    是规范语法。但正如你所说,这是个人喜好的问题。也许是我们不该发布的问题的素材@显然,我的“圣典”是没有根据的。我看到了,你看到了我的帖子: