Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mysql select avec logique conditionnelle

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

Vous pouvez ajouter plus de restrictions si vous souhaitez filtrer par from_country.meta_value ou similaire. Et vous devez remplacer tableName avec le nom réel de la table.

Pensez à from_country , to_country et days comme trois pointeurs différents vers des lignes de votre table, ou bien différentes variables prenant des valeurs à partir de votre relation. Vous voulez qu'ils décrivent tous les trois le même élément, et vous voulez également que chacun d'eux fasse référence au champ associé à son nom. Il en résulte les conditions énoncées ci-dessus.

Vous pourriez même créer une vue, afin d'accéder à cette table mal conçue comme à une table bien conçue :

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)

Cela créerait une vue à quatre colonnes, à partir de laquelle vous pourriez simplement sélectionner :

SELECT days FROM viewName WHERE from_country LIKE 'A%'

ou tout ce que vous voulez sélectionner. Notez qu'en raison des jointures à gauche, les valeurs manquantes pour certains éléments se traduiront par NULL valeurs. Cela contraste avec la requête ci-dessus, qui omettra tout élément qui n'a pas les trois valeurs spécifiées. Utilisez ce qui est le plus approprié à votre situation.