Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Mysql wybierz z logiką warunkową

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

Możesz dodać więcej ograniczeń, jeśli chcesz filtrować według from_country.meta_value lub podobne. I powinieneś zastąpić tableName z rzeczywistą nazwą tabeli.

Pomyśl o from_country , to_country i days jako trzy różne wskaźniki do wierszy w Twojej tabeli lub alternatywnie różne zmienne pobierające wartości z Twojej relacji. Chcesz, aby wszystkie trzy opisywały ten sam element, a także chcesz, aby każdy z nich odwoływał się do pola powiązanego z jego nazwą. Skutkuje to warunkami określonymi powyżej.

Możesz nawet utworzyć widok, aby uzyskać dostęp do źle zaprojektowanej tabeli jak do prawidłowo zaprojektowanej:

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)

Spowoduje to utworzenie widoku z czterema kolumnami, z których można po prostu wybrać:

SELECT days FROM viewName WHERE from_country LIKE 'A%'

lub cokolwiek chcesz wybrać. Zwróć uwagę, że z powodu lewych złączeń brakujące wartości niektórych elementów spowodują wynik NULL wartości. Jest to w przeciwieństwie do powyższego zapytania, które pominie każdy element, który nie ma określonych wszystkich trzech wartości. Użyj tego, co jest bardziej odpowiednie w Twojej sytuacji.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie Mysql z dwiema tabelami php

  2. Nie można przekazać parametru 2 przez odwołanie - uuid PDO

  3. Co to jest środowisko pracy MySQL?

  4. Jak wstawić wiele wierszy w pojedynczej instrukcji wstawiania?

  5. Czy przechowywanie nazw użytkowników i haseł w bazie danych jest bezpieczne?