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

条件付きロジックを使用したMysqlselect

    SELECT days.meta_value
    FROM tableName AS from_country,
         tableName AS to_country,
         tableName AS days
    WHERE from_country.item_id = to_country.item_id
      AND from_country.item_id = days.item_id
      AND from_country.field_id = 90
      AND to_country.field_id = 93
      AND days.field_id = 251
    

    from_country.meta_valueでフィルタリングする場合は、さらに制限を追加できます または類似。そして、tableNameを置き換える必要があります テーブルの実際の名前を使用します。

    from_countryについて考えてみてください 、to_country およびdays テーブル内の行への3つの異なるポインタとして、または代わりにリレーションから値を取得する異なる変数として。 3つすべてに同じアイテムを記述させ、それぞれがその名前に関連付けられたフィールドを参照するようにします。これにより、上記の状態になります。

    適切に設計されたテーブルのように、この不適切に設計されたテーブルにアクセスするために、ビューを作成することもできます。

    CREATE VIEW viewName AS
    SELECT item.item_id AS item_id,
           from_country.meta_value AS from_country,
           to_country.meta_value AS to_country,
           days.meta_value AS days
    FROM (SELECT DISTINCT item_id FROM tableName) AS item
         LEFT JOIN tableName AS from_country
                ON (from_country.item_id = item.item_id AND
                    from_country.field_id = 90)
         LEFT JOIN tableName AS to_country
                ON (to_country.item_id = item.item_id AND
                    to_country.field_id = 93)
         LEFT JOIN tableName AS days
                ON (days.item_id = item.item_id AND
                    days.field_id = 251)
    

    これにより、4つの列を持つビューが作成され、そこから次を選択するだけで済みます。

    SELECT days FROM viewName WHERE from_country LIKE 'A%'
    

    またはあなたが選択したいものは何でも。左結合のため、一部のアイテムの値が欠落していると、NULLになることに注意してください。 値。これは、3つの値すべてが指定されていないアイテムを除外する上記のクエリとは対照的です。状況に応じて適切なものを使用してください。




    1. MySQL8はパスワードが機能しない新しいユーザーを作成します

    2. SQLデータベースからの単純ランダムサンプル

    3. MariaDBでのFROM_DAYS()のしくみ

    4. 別のテーブルに基づくSQL削除行