2016-05-25 4 views
0

私はcourseID、studentNameのテーブルを持っていて、もう1つのテーブルはcourseIDです、studentNameは学生名の学生テーブルのコース名を検索します what sql syntax私は使うべきですか?参加または内側のあなたはこの試みることができるのMySQLで私は別のテーブルのID FKとvarcharを比較できます

+0

'JOIN'だけですINNER JOINの略語なので、違いはありません。それでは、クエリーは何をすべきでしょうか?ユーザーが学生名とコース名を入力し、その学生がコースを受講するかどうかによって「はい」または「いいえ」と表示されますか?または、ユーザーが学生の名前を入力し、すべてのコースを取得しますか?まだ何か他の?両方のテーブルからデータを選択する場合は、参加する方法があります。ただし、1つの表のデータのみを表示する場合は、exists句を指定した問合せが適している可能性があります。 –

+0

ユーザーが学生の名前を入力し、すべてのコースを取得します – uglyduck

答えて

0

に参加:

select a.studentName,b.courseName 
from tbl_name a 
inner join tbl_name b 
on a.courseID = b.courseID 
+0

このコードにはエイリアステーブルがあるため、選択した列にその名前が指定されていないため、エラーになります。 –

+0

はいエイリアス名を追加するのを忘れていました。ありがとうございました。 –

0

あなたがJOINを使用して、制約(例えばon a.courseId = b.courseId)を指定した場合は、INNER JOINを使用するかのように、それはまったく同じであるので、あなたがあなたのテーブル構造に応じて以下のような何かをする必要があります。

select * from studentTable 
inner join courseTable 
on studentTable.courseID = courseTable.courseID 
where studentTable.studentName = 'Jack Black'; 
のMySQLで

あなたも書くことができ

select * from studentTable, courseTable 
where studentTable.courseID = courseTable.courseID 
and studentName = 'Jack Black'; 

と同じ方法で内部的に照会されます。

のための正確な構文を確認するには、ここに参加する:あなたは、このようなすべてのコースと一緒に選択し、すべての生徒の名前として、参加した結果を探しているとき、あなたは参加http://dev.mysql.com/doc/refman/5.7/en/join.html

+1

カンマ区切りの結合を使用するのはまだ(冗長化してから20年以上)*可能ですが、初心者には使用を推奨しません。 –

+0

しかし、この種の構文を使用する可能性があることを知っておく必要があります。 –

0

を。例えば:

select s.studentname, c.coursename 
from course c 
join student_takes_course s on s.courseid = c.courseid; 

または(テーブルの順序は重要ではありませんように):

select s.studentname, c.coursename 
from student_takes_course s 
join course c on s.courseid = c.courseid; 

JOININNER JOINのためだけ短いです。いずれかを使用することができます。

ただし、参加した結果に興味がない場合は、参加しないことをおすすめします。たとえば、あなたの例のように、コーステーブルからコース名を表示するだけの場合などです。その後、通常INまたはEXISTSを使用します。

select coursename 
from course 
where courseid in 
(
    select courseid 
    from student_takes_course 
    where studentname = 'Joe' 
); 

または

select c.coursename 
from course c 
where exists 
(
    select * 
    from student_takes_course s 
    where s.studentname = 'Joe' 
    and s.courseid = c.courseid 
); 

を(私は彼らの簡略化のためEXISTS句の上にIN句を好むし、可能な場合はそれらを使用しています。)

関連する問題