sql >> Base de Datos >  >> RDS >> Mysql

Mysql select con lógica condicional

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

Puede agregar más restricciones si desea filtrar por from_country.meta_value o similar. Y debe reemplazar tableName con el nombre real de la tabla.

Piensa en from_country , to_country y days como tres punteros diferentes a filas en su tabla, o, alternativamente, diferentes variables que toman valores de su relación. Desea que los tres describan el mismo elemento y también desea que cada uno de ellos se refiera al campo asociado con su nombre. Esto da como resultado las condiciones establecidas anteriormente.

Incluso podría crear una vista para acceder a esta tabla mal diseñada como si fuera una tabla correctamente diseñada:

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)

Esto crearía una vista con cuatro columnas, desde la cual simplemente podría seleccionar:

SELECT days FROM viewName WHERE from_country LIKE 'A%'

o lo que quieras seleccionar. Tenga en cuenta que debido a las uniones a la izquierda, los valores faltantes para algunos elementos darán como resultado NULL valores. Esto contrasta con la consulta anterior, que omitirá cualquier elemento que no tenga los tres valores especificados. Use lo que sea más apropiado en su situación.