2016-12-22 5 views
0

"von"と "zu"という2つのカラムを持つ "email"というテーブルがあります。 両方ともvarchar(20)を含みます。私は特定の名前に一致するすべての文字列を含むテーブルを取得する必要があります。 メール:たとえばSQLテーブルの別名

von |  zu 
--------------- 
Finn | John 
Finn | Lisa 
Eric | Finn 
Eric | Lisa 

は今、私は「フィン」にすべての一致する名前を取得する必要があります。結果は次のようになります。

X 
------- 
John 
Lisa 
Eric 

私のコードは次のようになります。

Select X from 
(Select von as X from email where von = 'Finn'), 
(Select zu as X from email where zu = 'Finn'); 

そして、私は次のエラーを取得する:

#1248 - Every derived table must have its own alias 

誰も私を助けて、何私を教えてもらえます間違った? Greetings、Finn

+0

なぜカンマの代わりにUNIONを使用しないのですか。 –

+0

あなたが間違っているのは、サブクエリが独自の名前を持つ必要があるということです。) 'von'や' zu'のようなものを置いてください。これは、システムがテーブルを知らずにフィールドXを参照することができないため、エイリアスなしでインラインビューを参照することはできません。別の列に名前を付けたとしても、インラインビューのエイリアスを考えるのは賢明だと思います。 – xQbert

答えて

0

これは答えではありませんが、自分のクエリが何をしているかを明確にしています。


Select X from 
(Select von as X from email where von = 'Finn') von_finn, 
(Select zu as X from email where zu = 'Finn') zu_finn; 

(私は不足している表の別名を追加しました。)

あなたは1980年代に使用された、ここで昔の参加sytaxを使用しています。現在、私たちは使用している結合タイプを指定しています。なしテーブルの上に基準が参加しているあなたのケースでは、それはクロス結合のようになります。

Select X 
from (Select von as X from email where von = 'Finn') von_finn 
cross join (Select zu as X from email where zu = 'Finn') zu_finn; 

はのは、最初のサブクエリを見てみましょう。 vonを選択します。ここで、vonは「Finn」です。これは確かにタイプミスで、実際にzuを選択したかったのです。正しい?これはFinnから電子メールを受け取った人々をあなたに与えます。 2番目のサブクエリでも、Finnに電子メールを送信したすべてのユーザーを取得します。クロス結合手段:すべての送信者を受け取り、すべての受信者と結合します(つまり、すべての組み合わせを取得します)。サンプルデータでは、次のようになります。

 
zu_finn.x | von_finn.x 
----------+----------- 
Eric  | John 
Eric  | Lisa 

次に、xと表示されます。しかし、どちら? zu_finn.xまたはvon_finn.x? DBMSがあいまい性のエラー(これは望ましい)を投げるか、それとも静かに1つの列を決定するかによって、Eric, EricまたはJohn, Lisaと表示されます。

小さなクエリで多くの間違いがありました:-)私はあなたに言いたいと思ったので、あなたはそれを知ることができます。

+0

ありがとうございました:)私は学校でそれを学ばなければなりませんでした。 SQLは私のお気に入りのトピックではありません。何が言いたいのか理解した。非常に助けて!:) –

+0

そしてはい。それはタイプミスでした:) –

1

ユニオンを使用してください。これはあなたが望むもののために働くはずです。

Select von as X from email where von = 'Finn' 
UNION ALL 
Select zu as X from email where zu = 'Finn'; 
+0

UNIONを使用している場合、結果が重複する行が削除されることに注意してください。これは、このユーザーが探しているものではない可能性があります。 – Aleks

+0

良い点。 'Union ALL'に変更されました。ありがとうございました! –

+0

これは完璧です!ありがとう:)重複した行を削除する必要があります。あなたの連絡先を見つけるソーシャルネットワークのためのものです。 :) –

関連する問題