sql >> Databasteknik >  >> RDS >> Mysql

Mysql select med villkorlig logik

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

Du kan lägga till fler begränsningar om du vill filtrera efter from_country.meta_value eller liknande. Och du bör ersätta tableName med det faktiska namnet på tabellen.

Tänk på from_country , to_country och days som tre olika pekare till rader i din tabell, eller alternativt olika variabler som tar värden från din relation. Du vill att alla tre ska beskriva samma objekt, och du vill också att var och en av dem ska referera till fältet som är kopplat till dess namn. Detta resulterar i de villkor som anges ovan.

Du kan till och med skapa en vy för att komma åt denna dåligt designade tabell som en korrekt designad:

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)

Detta skulle skapa en vy med fyra kolumner, från vilka du helt enkelt kan välja:

SELECT days FROM viewName WHERE from_country LIKE 'A%'

eller vad du nu vill välja. Observera att på grund av vänsterkopplingarna kommer saknade värden för vissa objekt att resultera i NULL värden. Detta är i motsats till frågan ovan, som kommer att utelämna alla objekt som inte har alla tre värden angivna. Använd det som är mer lämpligt i din situation.




  1. Välj slumpmässig rad från en PostgreSQL-tabell med viktade radsannolikheter

  2. Fördjupad undersökning av säkerhet på radnivå

  3. Hur skapar man en ny databas med hstore-tillägget redan installerat?

  4. MariaDB JSON_VALUE() Förklarad