我的数据库(MySQL)包含5个表。
它应描述某些行为,状态和约束。
对于任何可执行的操作,必须满足其所有约束。 每个州都确保满足某些限制条件:
我的问题是:如何选择对于给定状态可执行的所有操作?
提前致谢, 扬
答案 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语句中。