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

MySQLは行を取得しますが、ある列の値を別の値よりも優先します

    これでうまくいくはずです:

    SELECT
         T1.id,
         T1.name,
         T1.value,
         T1.priority
    FROM
         My_Table T1
    LEFT OUTER JOIN My_Table T2 ON
         T2.name = T1.name AND
         T2.priority > COALESCE(T1.priority, -1)
    WHERE
         T2.id IS NULL
    

    これにより、複数の優先度レベルを設定して、最も高いものを返したいレベルにすることもできます(1と2がある場合は、2が返されます)。

    また、DBには設計上の問題があるように思われますが。私のアプローチは次のようになります:

    My_Table(id、name)My_Values(id、priority、value)with FK on idtoid。 My_TableのidとMy_Valuesのid、priorityのPK。もちろん、私も適切なテーブル名を使用します。



    1. 1つのクエリで多対多のテーブルを選択

    2. Oracle After Delete Trigger ...テーブルの変更を回避する方法(ORA-04091)?

    3. エラー1878(HY000):一時ファイルの書き込みに失敗しました

    4. Trunc()がPostgreSQLでどのように機能するか