私は3つのテーブルのセットを持っている:MySQL:複数のテーブルにまたがる複数列の結合?
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 | | +--------------------+--------------+------+-----+---------+-------+
これらの行のそれぞれは、それに関連付けられたグローバルにユニークなテーブルIDを持っています(dining_table
、poker_table
、computer_table
) 他の列の人の姓/名を保存しますロールを果たす。
私のモデルでは、1人の個人が複数のことを行うことができます。例えば、ジョー・スミスは、プログラマーとしてcomputer_table
に座って、poker_table
にディーラーとして座って、ウェイターとしてdining_table
を待つことができます。
私の質問は次のとおりです。 特定の人物のtable_ids
をすべて取得できるようにするクエリが必要です。具体的には、クエリは、Joe Smithが現在いる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";
しかし、それは3つの別々のクエリをだと私は本当に可能な場合ことを行うことを避けることを好むだろう。結合を使用して1つのクエリでそれを実行できますか?
Perphaps質問のタイトルのもっと控えめなやり方は、MySQLです:複数のテーブルにまたがる複数の "ROW"結合?それはあなたが最初に尋ねてきたことです...あなたは2つ以上をマージしていませんでした条件付きの "列"を選択します。 – Victor