2017-02-05 4 views
0

カラムが(tid、tname) のテーブル 'teachers'があり、カラムが(sid、sname)のテーブル 'students'があります。彼らがm:nの関係を持っていると仮定すると、tidとsidの両方がそれぞれ教師と学生の一冊を参照しているもう一つのテーブルt_s(tid、sid)があります。 今、私が知りたい:。(自分のTIDの付き)教師の名前と各先生の下で、学生の数を[使用せずに参加または直積]異なるタイプの異なるテーブルのカラムを結合なしで選択する

次のクエリは私にTIDとの数を返します:

SELECT t.tid, count(*) as numberofstudents 
FROM t_s t 
GROUPBY by t.tid; 

SELECT t.tid, count(*) as numberofstudents 
FROM t_s t 
GROUP BY t.tid 
UNION 
SELECT t1.tid,t1.tname 
FROM teachers t1 
WHERE t1.tid in (SELECT t2.tid 
       FROM t_s t2) 

は、列の型が異なるため、それが動作しないことを発見:

は、どのように私は労働組合と試みたそれぞれのTIDとTNAMEに、一致します。

これを達成する方法はありますか? ありがとうございました!

+1

W結合なしでハイ? –

+0

JOINの回避は、少し不自然です。 – Strawberry

+0

は純粋にプレゼンテーションですか?あなたは先生の名前のヘッダーの行をし、その数を(横ではなく)下にしたいですか? –

答えて

0

私も使用せずに

が参加または

しかしデカルト積理由についての興味、あなたはこれを試すことができます。

SELECT 
    t.tid, 
    COUNT(*) as numberofstudents, 
    (SELECT t1.tname FROM teachers t1 WHERE t1.tid = t.tid) AS tname 
FROM t_s t 
GROUP BY by t.tid; 
+0

ありがとう@フォワード! –

0

てみ使用してダミーの列

SELECT t.tid, '' as teachername, count(*) as numberofstudents 
FROM t_s t 
GROUP BY t.tid 
UNION 
SELECT t1.tid,t1.tname, 0 
FROM teachers t1 
WHERE t1.tid in (SELECT t2.tid 
       FROM t_s t2) 
+0

Hey @ P.Salmon私はそれを試しましたが、結果はunorganized –

+0

そうでしょう。私はあなたが外側のクエリでこれを包む必要があると思うし、tidと学生数で注文します。先生を最後にしたい場合は、質問の教師の部分で0を非常に高い数字に変更します。 –

関連する問題