У меня есть набор из трех таблиц:
Dining_Tables;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| dining_table | int(11) | NO | PRI | NULL | |
| bus_boy | varchar(35) | NO | | NULL | |
| waiter | varchar(35) | NO | | NULL | |
| server | varchar(35) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
Poker_Tables;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| poker_table | int(11) | NO | PRI | NULL | |
| dealer | varchar(35) | NO | | NULL | |
| pit_boss | varchar(35) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
Computer_Tables;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| computer_table | int(11) | NO | PRI | NULL | |
| programmer | varchar(35) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
Каждая из этих строк имеет глобально уникальный идентификатор таблицы, связанный с ней: (* 1004 *, poker_table
, computer_table
)
В других столбцах хранятся имя / фамилия человека, выполняющего проверку.
В моей модели один человек может делать несколько вещей. Например, Джо Смит мог одновременно сидеть за computer_table
как программист, за poker_table
как за дилером и ждать dining_table
как официанта.
Мой вопрос такой:
Я хочу запрос, который позволит мне получить все table_ids
для данного человека. В частности, запрос затем вернет список table_ids
, в котором сейчас находится Джо Смит.
Я мог бы сделать что-то вроде этого:
select dining_table from Dining_Tables where
bus_boy = "Joe Smith" or
waiter = "Joe Smith" or
server = "Joe Smith";
select poker_table from Poker_Tables where
dealer = "Joe Smith" or
pit_boss = "Joe Smith";
select computer_table from Computer_Tables where
programmer = "Joe Smith";
Тем не менее, это три отдельных запроса, и я бы действительно предпочел не делать этого, если это возможно. Могу ли я сделать это в одном запросе с помощью объединений?