0

クエリ定義:
すべての生徒とすべての教師を表示し、名前が同じ人を一覧表示します。

同じ FirstName を持つ学生と教師を含めたい。
それらが複数回繰り返されても問題ありません。各生徒として、教師はそれぞれ一意の StudentID、StaffID を持ちます。


データ:

Student Table:


StudFirstName 
   David
   John



スタッフ テーブル:

StfFirstName 
  David
  Arnold


期待される結果: デビッド


インターネットでMysql Full Outer Join Workaroundを検索したところ、
以下の 2 つの手法が見つかりました。


テクニック 1: ユニオンオールを使用する:

Select Students.StudFirstName
from Students
Left Outer Join Staff
On Students.StudFirstName = Staff.StfFirstName

Union all 

Select Students.StudFirstName 
from Students
Right Outer Join Staff
On Students.StudFirstName = Staff.StfFirstName

where Staff.StfFirstName is null;

テクニック 2:ユニオンの使用:

Select Students.StudFirstName
from Students
Left Outer Join Staff
On Students.StudFirstName = Staff.StfFirstName

Union 

Select Students.StudFirstName 
from Students
Right Outer Join Staff
On Students.StudFirstName = Staff.StfFirstName;


手法 3: しかし、クエリ 3 を使用して期待どおりの結果が得られました。

Select Students.StudFirstName
from Students,Staff
where Students.StudFirstName = Staff.StfFirstName;


私の質問:
テクニック 1 と 2 を使用して同じ結果を得るにはどうすればよいですか?

テクニック 1、2、および 3 ですべて同じ結果が得られる場合の違いは何ですか? どのテクニックをいつ使用する必要がありますか?

4

2 に答える 2

0

何をするかUnionUnion ALL知る

このSQLフィドルを参照してください

テクニック 2 で結果を得るには

テクニック 1で同じ結果が得られるかどうかは疑問です。

Distinct Result を取得するには、 3 番目のクエリを次のように編集してください。

Select distinct Students.StudFirstName
from Students,Staff
where Students.StudFirstName = Staff.StfFirstName;

MySQL を考慮する

于 2013-03-11T13:36:27.390 に答える
0

まあ、最初の 2 つは... あなたが望む (または望むように見える) ために複雑です。

「要求」の定式化が悪いか、結果が示されていないだけだと思います。

すべての生徒とすべての教師を見せて、名前が同じ人をリストアップしてください

「必要な」結果である必要があります(「David」だけが必要な場合は、「すべての生徒とすべての教師」が必要ないことは確かです)

生徒と教師の間で共通の名前を教えてください。

次に、3 番目のクエリは問題なく、より適切な構文で書き直され、次のようになります。

SELECT DISTINCT s.StudFirstName
FROM Students stu
INNER JOIN Staff sta
  ON stu.StudFirstName = sta.StfFirstName;

また

SELECT DISTINCT stu.StudFirstName
FROM Students stu
WHERE EXISTS (SELECT NULL
              FROM Staff sta
              WHERE stu.StudFirstName = sta.StfFirstName);

DISTINCT の使用を編集 して、3 つの David を避けるようにします... Student に 3 つの David があり、「1 つの」David を取得したい場合。あなたの質問では明確ではありません。また、明確ではありません:Staffテーブルに3人のDavidがいる場合、何を取得する必要があります...

于 2013-03-11T13:29:03.090 に答える