2011-11-10 13 views
7

Potrzebuję wybrać wiersz z tabeli o konkretnym id, ale jeśli wiersz nie istnieje, muszę wybrać pierwszy wiersz. czy można to zrobić w jednym zapytaniu?MySQL Wybierz inny wiersz, jeśli taki nie istnieje

przykład: Mam tabelę z identyfikatorem i polami tekstowymi. i mam 3 wiersze w tabeli

id txt 
---------------- 
1  text1 
2  text2 
3  text3 

muszę zaznaczyć pierwszy wiersz, jeśli powiedzmy SELECT * FROM myTable WHERE id = 4 nie istnieje Else zaznacz wiersz z id 4.

+0

może to być możliwe, ale to zależy od kilku aspektów ... proszę pokazać pewną strukturę tabeli, kwerendy SQL ... co ty próbowałeś? jak rozpoznać "pierwszy rząd"? – Yahia

+0

Z relacyjnego punktu widzenia nie ma czegoś takiego jak pierwszy wiersz, ponieważ tabele nie mają naturalnego porządku. Jakie jest twoje zamówienie na określenie pierwszego rzędu? – outis

+0

Mam na myśli wiersz z najniższym identyfikatorem. – Headshota

Odpowiedz

9

Spróbuj:

SELECT * FROM 
    (SELECT * FROM your_table 
     WHERE id = your_id 
     LIMIT 1 
    UNION 
    SELECT * FROM your_table 
     LIMIT 1) a 
LIMIT 1 

Chodzi o to, aby wziąć pierwszy pożądany wiersz i dołączyć do tego pierwszego rzędu, w końcu biorąc pierwszy. W razie potrzeby rząd nie istnieje, najpierw zostanie wybrana ...

+0

Dzięki wielkie !!! – Headshota

+0

Czy to gwarantuje, że zwróci konkretną, jeśli jest tam? Nie oczekiwałbym, że instrukcja "union" zachowa kolejność zwracanych wierszy, tak, że wiersz "top" może nadal być zwracany w tym zapytaniu, nawet jeśli konkretny istnieje. – kdawg

3
SELECT * FROM (
    SELECT * FROM table1 WHERE [..your criteria...] LIMIT 1 
    UNION 
    SELECT * FROM table1 LIMIT 1  
) LIMIT 1 
Powiązane problemy