sql >> データベース >  >> RDS >> Mysql

SQLクエリステートメント

    SELECT sid, 'Math' as subject, math as mark
    FROM your_table
    UNION ALL
    SELECT sid, 'English' as subject, english as mark
    FROM your_table
    UNION ALL
    SELECT sid, 'French' as subject, french as mark
    FROM your_table
    

    しかし、問題の根本的な原因は、データベースの設計が間違っていることです。これらのサブジェクトは、そもそも列であってはならず、目的の出力と非常によく似たテーブルに格納する必要があります。

    編集

    それで、それは何をしますか?

    SELECT sid, 'Math' as subject, math as mark
    FROM your_table
    

    sidを返します 列、ハードコードされた値'Math'を持つ「仮想」列 subjectという名前が付けられています 。値'Math'を保存していないため どこかで、これをハードコーディングする必要がありました。そして最後に、列mathも選択します。 markという名前を使用する 代わりは。 mathの違いに注意してください および'Math' -1つは列で、もう1つは一重引用符のために文字列リテラルです。

    これは、3つの科目すべてに対して行われます(4つの科目がある場合、UNIONには4つの部分が必要です)

    UNION ALLは、3つのSELECTすべてを1つのクエリに結合します。 andrソリューション(それを理解していない誰かによって反対された)は、それを派生テーブル(またはインラインビュー)に明示的に配置することによって、これをさらに明確にします。

    各SELECTを単独で実行して、個々の部分が何をしているかを確認します。

    パーツas mark は「列エイリアス」と呼ばれ、結合内の異なるテーブルから同じ名前の列を取得し、結果セットに一意の名前を付けるために使用することもできます。



    1. MySQL:レコードが存在しない場合でも、範囲内のすべての日付を選択します

    2. Docker(Apple Silicon / M1 Preview)MySQLマニフェストリストエントリにlinux / arm64/v8に一致するマニフェストがありません

    3. SQLSELECTステートメントの式の値を他の式に再利用する

    4. 大文字と小文字を区別するデータベースクエリ