2 つの SQL テーブルを結合するときに列を切り替える
P粉285587590
P粉285587590 2024-02-26 09:29:39
0
1
354

シナリオは、学生テーブルがあり、クラスが 4 つあり、部屋番号しか知らない場合です。また、テーブルが 2 つあり、1 つは教師の名前と部屋番号、もう 1 つは教師の名前と担当科目が記載されています。ここで、生徒は数学の先生が誰であるかを知りたいと考えています。生徒の名前と数学の先生の名前だけが必要です。

これは、私が取り組んでいるバウチャー プロジェクトの架空のシナリオです。多くの状況で動作するようになりましたが、非常に遅いです。新しい列を作成するためのケース条件では何も速度が低下することはありません。学生テーブルを教師テーブルに関連付ける列がわからないため、同じケース条件を使用してテーブルを結合したままにしました。左結合のケース条件が問題を引き起こしているようですが、遅延なく同じ結果を得るために使用できる他の方法はありますか?

P粉285587590
P粉285587590

全員に返信(1)
P粉514458863

あなたがこれほど多くの問題を抱えているのは、あなたのアーキテクチャがあまり良くないからだと思います。具体的には、各コース/部屋番号の列がある学生テーブルのスキーマです。

私は最初にサブクエリを使用してこの問題を修正しました。例:

SELECT `学生名`、期間として 1、ルームとして `1st Room#` を学生から選択します
すべてを結合する
`学生名`、期間として 2、ルームとして `2nd Room#` を学生から選択します。
すべてを結合する
`学生名`、期間として 3、部屋として `3rd Room#` を学生から選択します。
すべてを結合する
`学生名`、期間として 4、部屋からの学生として `4th Room#`を選択します

このように「ピボットを解除」すると、きれいな Student Name | Period | Room スキーマが得られ、この問題の解決がはるかに簡単になります。

SELECT `生徒名`、件名.`教師名`
から
    (
      `学生名`、期間として 1、部屋として `1st Room#` を学生から選択します
      すべてを結合する
      `学生名`、期間として 2、ルームとして `2nd Room#` を学生から選択します。
      すべてを結合する
      `学生名`、期間として 3、部屋として `3rd Room#` を学生から選択します。
      すべてを結合する
      `学生名`、期間として 4、部屋として `4th Room#` を学生から選択します。
    ) 学生
    INNER JOIN 教師ルーム
       ON students.Room = TeacherRoom.`部屋番号`
    INNER JOIN 教師件名
       ON TeacherRoom.`教師名` = TeacherSubject.Subject
WHERE TeacherSubject.Subject = '数学';
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!