こんにちは、私は次のクエリを持っている、と私はそれが何を意味するのか思ったんだけど:選択クエリで同じテーブルを2回使用することはできますか?
SELECT c1.id as sender, c2.id as replier
FROM contacts c1, contacts c2;
はどのようにして二度同じテーブルを使用することができますか?
こんにちは、私は次のクエリを持っている、と私はそれが何を意味するのか思ったんだけど:選択クエリで同じテーブルを2回使用することはできますか?
SELECT c1.id as sender, c2.id as replier
FROM contacts c1, contacts c2;
はどのようにして二度同じテーブルを使用することができますか?
このクエリは、コンタクトIDのすべての可能なペアを含むテーブルを作成します。連絡先IDが1、2、3であれば
はたとえば、あなたは結果
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
これは簡単な答えです:この例に記載されているクエリを使用してください。それはうまくいくはずです。これはあなたが二度同じテーブルを使用したい場合、あなたは彼らが異なっていたとして、「それらの」テーブルを結合する必要があることに注意してください、おそらく悪いアイデアではあるが:
SELECT c1.id as sender, c2.id as replier
FROM contacts c1, contacts c2
WHERE sender.id = replier.id
WHERE句が動作するためのテーブル 'sender'または' replier'はありません。 2つのテーブルが同じテーブルである場合には、「異なるテーブルに参加する必要があることに注意してください」という意味を完全には明確にしていません。 –
クエリで二回、単一のテーブルを使用しますそのような2つの名前を付けることによって。
エイリアスは、しばしばキーワードASとともに導入されます。また、通常は結合条件を指定します(それがなければ、テーブルのCartesian Productを結合します)。あなたが明示的なJOIN表記法を使用することを好みます。
SELECT c1.id AS sender, c2.id AS replier
FROM contacts AS c1
JOIN contacts AS c2 ON c1.xxx = c2.yyy;
この例では、どの列が結合に使用されるかはわかりません。私たちはそれを解決するための情報を持っていません。
通常、このようなメッセージテーブルとして、仲介者として機能するように別のテーブルがあると思います:
SELECT c1.id AS sender, c1.email AS sender_email,
c2.id AS replier, c2.email AS replier_email,
m.date_time
FROM messages AS m
JOIN contacts AS c1 ON m.sender_id = c1.id
JOIN contacts AS c2 ON m.replier_id = c2.id;
として、なるだろうはい、あなたがテーブルに別のエイリアスを与えることによって、二度同じテーブルを使用することができます。私は自己結合について学ぶことがあなたの理解に役立つと思います。
はい、同じSELECT
クエリ内で同じテーブルを複数回使用できます。
テーブルが同じスコープ内に複数回現れる場合は、テーブルの相関名(大まかに「エイリアス」)のみを使用する必要があることに注意してください。それぞれが異なるスコープ(各UNION
キーワードによって分離さ)の範囲内であるので、例えば、以下SELECT
クエリは、二度同じテーブルを使用するが、いかなるテーブル相関名が必要とされない:
SELECT id, 'Sender' AS contact_narrative
FROM contacts
WHERE something = 1
UNION
SELECT id, 'Replier' AS contact_narrative
FROM contacts
WHERE something = 2;
はそれを試してみて見ます。答えはyesですBTW –