sql >> Databáze >  >> RDS >> Mysql

Mysql select s podmíněnou logikou

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

Pokud chcete filtrovat podle from_country.meta_value, můžete přidat další omezení nebo podobné. A měli byste nahradit tableName se skutečným názvem tabulky.

Představte si from_country , to_country a days jako tři různé ukazatele na řádky ve vaší tabulce nebo alternativně různé proměnné přebírající hodnoty z vašeho vztahu. Chcete, aby všechny tři popisovaly stejnou položku, a také chcete, aby každá z nich odkazovala na pole spojené s jejím názvem. To má za následek výše uvedené podmínky.

Můžete dokonce vytvořit pohled, abyste měli přístup k této špatně navržené tabulce jako ke správně navržené tabulce:

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)

Vznikne tak pohled se čtyřmi sloupci, ze kterých můžete jednoduše vybrat:

SELECT days FROM viewName WHERE from_country LIKE 'A%'

nebo cokoli chcete vybrat. Všimněte si, že kvůli levým spojením budou chybějící hodnoty u některých položek mít za následek NULL hodnoty. To je na rozdíl od výše uvedeného dotazu, který vynechá jakoukoli položku, která nemá zadané všechny tři hodnoty. Použijte cokoli, co je ve vaší situaci vhodnější.




  1. MySql dotazový analyzátor – bezplatná řešení

  2. Jak změnit řazení databáze SQL Server pomocí T-SQL

  3. Jak spravovat data správy verzí uložená v mysql

  4. Umožňuje oracle možnost nepotvrzeného čtení?