I have a set of three tables:
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 | | +--------------------+--------------+------+-----+---------+-------+
Each of these rows has globally unique table id associated with it: (dining_table
, poker_table
, computer_table
)
The other columns store the First/Last name of the person fulfilling the roll.
In my model, a single individual can be doing multiple things. For example, Joe Smith could be simultanously sitting at a computer_table
as a programmer, sitting at a poker_table
as a dealer, and waiting on a dining_table
as a waiter.
My question is this:
I want a query that will allow me to retrieve all the table_ids
for a given person. Specifically, the query would then return a list of table_ids
that Joe Smith is currently at.
I could do something along these lines:
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";
However, that's three seperate queries and I'd really prefer to avoid doing that if possible. Can I do it in one query using joins?