4

2つのテーブルがあります。最初のテーブルは、batchフィールド「バッチ」にカンマ区切りの学生IDを含むテーブルです。

batch
--------------
id      batch 
--------------
1       1,2     
2       3,4

2番目の表はマークです

marks
----------------------
id  studentid   subject     marks
1     1         English     50
2     2         English     40
3     3         English     70
4     1         Math        65
5     4         English     66
6     5         English     75
7     2         Math        55

サブクエリを使用せずに、英語で45点以上を獲得した最初のバッチID=1の学生を見つける方法。

単一のクエリを使用してこれを実行することがわかった問題は、JOINステートメントでINを関連付け演算子として使用できないことです。

それを機能させるには、以下のクエリでどのような変更が必要ですか?

SELECT * FROM batch
INNER JOIN marks ON marks.studentid IN(batch.batch) where batch.id = 1
4

3 に答える 3

9
SELECT  m.studentId
FROM    batch b
JOIN    marks m
ON      FIND_IN_SET(m.studentId, b.batch)
        AND m.subject = 'English'
GROUP BY
        m.studentId
HAVING  SUM(marks) > 45
于 2012-06-05T10:46:40.900 に答える
0

適切な解決策は、学生とバッチの関係をリファクタリングすることだと思います。「バッチ」テーブルへの外部キーを「学生」テーブルに追加してみませんか。学生 1 と 2 はバッチ 1 を参照し、学生 3 と 4 はバッチ 2 を参照します。

于 2012-06-05T10:48:55.037 に答える
0

1 つのデータベース フィールドに 2 つの値を格納したくない場合 -第 1 正規形に違反し SQL を使用してデータを分析しようとするとうまくいかないことになります。

さまざまな ID を使用して問題の説明で何を得ているのか完全には理解できませんが、バッチ テーブルを次のようにする必要があると思います。

batch
--------------
id      batch 
--------------
1       1
1       2     
2       3
2       4
于 2012-06-05T10:49:24.323 に答える