Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql изберете с условна логика

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 като три различни указателя към редове във вашата таблица или алтернативно различни променливи, приемащи стойности от вашата релация. Искате и трите да описват един и същи елемент и също така искате всеки от тях да се отнася до полето, свързано с неговото име. Това води до условията, посочени по-горе.

Можете дори да създадете изглед, за да получите достъп до тази лошо проектирана таблица като правилно проектирана:

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)

Това ще създаде изглед с четири колони, от които можете просто да изберете:

SELECT days FROM viewName WHERE from_country LIKE 'A%'

или каквото искате да изберете. Имайте предвид, че поради лявото свързване, липсващите стойности за някои елементи ще доведат до NULL стойности. Това е в контраст със заявката по-горе, която ще пропусне всеки елемент, който няма посочени и трите стойности. Използвайте каквото е по-подходящо във вашата ситуация.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да извикате съхранена процедура от хибернация, която има и IN и OUT параметри

  2. Експортирайте MySQL база данни с PHP

  3. Разделете mysqldump файл с множество бази данни по база данни

  4. MySQL CASE за актуализиране на множество колони

  5. JPA:Връзка много към много - JsonMappingException:Безкрайна рекурсия