выбрать все строки, которые удовлетворяют ограничениям из другой таблицы - PullRequest
0 голосов
/ 10 октября 2011

моя база данных (MySQL) содержит 5 таблиц.

Он должен описывать определенные действия, состояния и ограничения.

Чтобы любое действие было выполнимым, все его ограничения должны быть выполнены.Каждое состояние обеспечивает выполнение определенных ограничений:

  1. Действия (идентификатор, имя)
  2. Состояния (идентификатор, имя)
  3. Ограничения (идентификатор, имя)
  4. has_constraints (Action_ID, Constraint_ID)
  5. assures_constraints (State_ID, Constraint_ID)

Мой вопрос: как выбрать все действия, которые выполняются для данного состояния?

Заранее спасибо, Ян

Ответы [ 3 ]

2 голосов
/ 10 октября 2011
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))
  • Извлекает все действия без ограничений, которые государство не допускает.
  • Включает действия без ограничений вообще.
0 голосов
/ 10 октября 2011

Я не знаю столбцов, которые вы из каждой из этих таблиц, но в соответствии с вашим утверждением, возможно, мы могли бы сделать заявление следующим образом:

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.

0 голосов
/ 10 октября 2011

Вы можете сделать выбор, используя JOINs, я не могу сказать точную схему таблицы для вашего примера.Но взгляните на документацию по MySQL и узнайте о соединениях, они доставят вас туда, куда вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...