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

时间:2011-10-09 22:26:18

标签: mysql sql

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

它应描述某些行为,状态和约束。

对于任何可执行的操作,必须满足其所有约束。 每个州都确保满足某些限制条件:

  1. 操作(ID,名称)
  2. 国家(身份证,姓名)
  3. 约束(ID,名称)
  4. has_constraints(Action_ID,Constraint_ID)
  5. assures_constraints(State_ID,Constraint_ID)
  6. 我的问题是:如何选择对于给定状态可执行的所有操作?

    提前致谢, 扬

3 个答案:

答案 0 :(得分:2)

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))
  • 检索没有状态不允许的约束的所有操作。
  • 包括没有约束的行动。

答案 1 :(得分:0)

您可以使用JOIN进行选择,我无法告诉您示例的确切表格架构。 但是看看MySQLs documentation并了解JOIN,它们会带你到你想去的地方。

答案 2 :(得分:0)

我不知道你们每个表中的列,但是根据你的说法,也许我们也可以这样做:

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>

如果你想从状态表中获取一些列,你可以将它添加到from中的join语句中。