2017-10-06 8 views
1

学部および大学院レベルで教える講師の名前を検索します。これは、講師件名 2つのテーブルから何も返さない複数の制約があるINNER JOINテーブルからSELECTする方法は?

SELECT DISTINCT(CONCAT(firstname, ' ', lastname)) as Lecturer_Name 
FROM Lecturer INNER JOIN Subject on Lecturer.id = Subject.lecturer 
WHERE yearlevel IN(1, 2, 3) and WHERE yearlevel = 9 
GROUP BY Lecturer.id 

、学部とyearlevel = 9でyearlevel =(1,2,3)の大学院生です。

ご協力いただければ幸いです。

+0

'DISTINCT'は**、それは' SELECT DISTINCT'の一部機能ですされていないと選択された行全体に適用されます。物事をより明確にするには、それらの冗長な括弧を削除します。つまり、 'DISTINCT CONCAT(firstname、 ''、lastname)... 'を選択します。 – jarlh

答えて

0

SQL照会に複数のWHEREステートメントを使用することはできません。もう1つは削除する必要があります。 DISTINCTは関数ではありません。あなたはそれを利用するために括弧の代わりにスペースが必要です。

また、91, 2, 3に含まれていないので、WHERE yearlevel IN(1, 2, 3) AND yearlevel = 9の結果は得られません。さらに、代わりにORステートメントを使用する必要があります。いっそ、単にあなたのINにそれを含める:

SELECT DISTINCT CONCAT(firstname, ' ', lastname) as Lecturer_Name 
FROM Lecturer INNER JOIN Subject on Lecturer.id = Subject.lecturer 
WHERE yearlevel IN(1, 2, 3, 9) 
GROUP BY Lecturer.id 

は、この情報がお役に立てば幸い! :)

0

注意しなければならないことは、ANDの後にWHEREの必要はないということです。それ以外 、あなたの状態が正しいとは思われない:

yearlevel IN (1, 2, 3) AND yearlevel = 9 

yearlevelは1、2、または(第一条件あたりなど)3のいずれかでなければならないならば、それは9とIF yearlevelではありません(2番目の条件に従って)9でなければならないので、1,2または3になることはありません。したがって、両方の条件を同時に満たすことはできません。これを解決する1つの方法は、最初の条件ですべてを含めると第二を削除することです:

yearlevel IN (1, 2, 3, 9) 
0

DISTINCTは関数ではありません。また、SELECT DISTINCTGROUP BYをほとんど必要としません。私はまた、表の別名を追加

SELECT DISTINCT CONCAT_WS(' ', l.firstname, l.lastname) as Lecturer_Name 
FROM Lecturer l INNER JOIN 
    Subject s 
    ON l.id = s.lecturer 
WHERE yearlevel IN (1, 2, 3) AND yearlevel = 9 ; 

注:

私は提案します。

編集:私は、クエリを読んで

実は、私はあなたが意図し考える:

SELECT DISTINCT CONCAT_WS(' ', l.firstname, l.lastname) as Lecturer_Name 
FROM Lecturer l INNER JOIN 
    Subject s 
    ON l.id = s.lecturer 
GROUP BY CONCAT_WS(' ', l.firstname, l.lastname) 
HAVING SUM(yearlevel IN (1, 2, 3)) > 0 AND 
     SUM(yearlevel = 9) > 0 ; 
関連する問題