Mysql 从另一个表中选择满足约束的所有行
我的数据库(MySQL)包含5个表 它应该描述某些行动、状态和约束 要使任何操作可执行,必须满足其所有约束。 每个状态都确保满足某些约束条件:Mysql 从另一个表中选择满足约束的所有行,mysql,sql,Mysql,Sql,我的数据库(MySQL)包含5个表 它应该描述某些行动、状态和约束 要使任何操作可执行,必须满足其所有约束。 每个状态都确保满足某些约束条件: 操作(ID、名称) 州(ID、姓名) 约束(ID、名称) 具有约束(操作ID、约束ID) 确保约束(状态ID、约束ID) 我的问题是:如何选择在给定状态下可执行的所有操作 提前感谢,, Jan您可以使用联接进行选择,我无法从您的示例中说出确切的表模式。 但是,请查看并了解联接,它们将带您去您想要去的地方。我不知道每个表中的列,但是根据您的陈述,我们也可以
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))
- 检索没有状态不允许的约束的所有操作
- 包括完全没有约束的操作
SELECT*
insideEXISTS
子查询,但这只是个人偏好。@ypercube:AFAIKSELECT 1
是规范语法。但正如你所说,这是个人喜好的问题。也许是我们不该发布的问题的素材@显然,我的“圣典”是没有根据的。我看到了,你看到了我的帖子: