Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL seleziona con logica condizionale

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

Puoi aggiungere più restrizioni se desideri filtrare per from_country.meta_value o simili. E dovresti sostituire tableName con il nome effettivo della tabella.

Pensa a from_country , to_country e days come tre diversi puntatori a righe nella tua tabella, o in alternativa diverse variabili che prendono valori dalla tua relazione. Si desidera che tutti e tre descrivano lo stesso elemento e si desidera anche che ciascuno di essi faccia riferimento al campo associato al suo nome. Ciò si traduce nelle condizioni sopra indicate.

Potresti anche creare una vista, per accedere a questa tabella mal progettata come se fosse progettata correttamente:

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)

Questo creerebbe una vista con quattro colonne, da cui potresti semplicemente selezionare:

SELECT days FROM viewName WHERE from_country LIKE 'A%'

o qualunque cosa tu voglia selezionare. Tieni presente che a causa dei join a sinistra, i valori mancanti per alcuni elementi risulteranno in NULL valori. Ciò è in contrasto con la query precedente, che ometterà qualsiasi elemento che non ha tutti e tre i valori specificati. Usa ciò che è più appropriato nella tua situazione.