/ / MySQL - jak zapytać o jedną wartość, ale domyślnie o inną? - mysql

MySQL - Jak zapytać o jedną wartość, ale domyślnie inną? - mysql

Zadałem pytanie dotyczące wielu wierszy w poprzednim wątku, ale teraz muszę wiedzieć o jednym wierszu. To jest przykładowe zapytanie:

SELECT * FROM table1 WHERE this = 5 LIMIT 1

Ale jeśli nie znaleziono żadnych wierszy, chciałbym wtedy znaleźć rekord o innej wartości:

SELECT * FROM table1 WHERE this = 1 LIMIT 1

Chcę więc znaleźć wiersz o wartości 5, jeśli nie zostanie znaleziony, to domyślnie znajdź wiersz o wartości 1. Jak to zrobić w jednym zapytaniu? Czy tak działałoby oświadczenie OR?

SELECT * FROM table1 WHERE this = 5 OR this = 1 LIMIT 1

Czy kolejność instrukcji OR spróbuje znaleźćdowolny wiersz o wartości 5, jeśli zostanie znaleziony, to zatrzyma się i zwróci wiersz? JEŻELI nie znaleziono, poszukaj 1, a następnie zwróć ten wiersz? Jeśli nie, to jak mam to zrobić za pomocą pojedynczego zapytania, w którym szuka jednej wartości, jeśli nie znaleziono wartości domyślnej, aby znaleźć inną wartość?

Myślałem o tym zapytaniu:

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this ASC LIMIT 1

Jednak to zapytanie zawsze zwróci wartość 1, jeśli obie wartości zostaną znalezione, prawda? Więc próbowałem tego:

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this DESC LIMIT 1

Ale to zawsze zwróci wartość 5, jeśli oba wiersze zostaną uznane za prawidłowe?

Odpowiedzi:

1 dla odpowiedzi № 1

Wydaje się, że twoje pytanie nadaje priorytet wyszukiwaniudla 5 i tylko jeśli nie zostanie znaleziony, to poszukaj 1. Stąd twoje drugie rozwiązanie spełnia wymóg grzywny. Zwróci wartość 5 niezależnie od tego, czy 5 zostanie znalezione, czy tylko 5 i 1 istnieją.

druga opcja

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this DESC LIMIT 1

0 dla odpowiedzi nr 2

Spróbuj tego

SELECT *
FROM table1 tab
WHERE tab.this = IF((SELECT COUNT(*)
FROM table1
WHERE this = 5) > 0, 5, 1)

Zapytanie wewnątrz IF sprawdza liczbę.

Nie jestem pewien co do wydajności, ale myślę, że to rozwiązuje problem.