Zapytanie sortujące które zwraca wszystkie wyniki po podanym id

0

Witam

Może Wam chłopaki uda się cos wymyśleć.
Mam taką baze

screenshot-20220803211403.png
i teraz chciałbym żeby najpierw ustawić sortowanie (order by name)
a następnie dostawać wszystkie wyniki po where id + następne rekordy

screenshot-20220803211902.png
mam taki zapytanie

SELECT * FROM yourtable WHERE ID = 3 or name > (SELECT name FROM yourtable WHERE ID = 3) ORDER BY name;

ale już nie zwraca id 4
a jak zmienie na >=

SELECT * FROM yourtable WHERE ID = 4 or name >= (SELECT name FROM yourtable WHERE ID = 4) ORDER BY name;

to otrzymuje id 3 i id 4

Niby wydaje się proste z wyglądu : posortuj i od tego id wypisz mi resztę wyników.

Dzięki chłopaki

Update:

Może wpierw jakoś posortować tabele i przypisać im wstępnie identyfikatory kolejności.

SELECT *,ROW_NUMBER() OVER(ORDER BY name ASC) as _id FROM `yourtable`;

ale i tak nie wiem co dalej z tym zrobić

0

A nie możesz użyć union? Tzn jakoś tak. PS. strzelam na pałę.

select * from items where id = 4
union all
select * from items where name > (select name from items where id = 4)
order by name;
0
nalik napisał(a):

A nie możesz użyć union? Tzn jakoś tak. PS. strzelam na pałę.

select * from items where id = 4
union all
select * from items where name > (select name from items where id = 4)
order by name;

Dzięki za zainteresowanie jednak jak zmiennie na where id = 3 nie zwraca id 4 który powinien być na drugim miejscu w zwróconym zapytaniu

0

wszystkie większe od name lub równe name i równe id, czyli
select * from items where name > 'bbb' or (name = 'bbb' and id = 4) order by name
ps. 'bbb' możesz wyciągnąć podzapytaniem

0
abrakadaber napisał(a):

wszystkie większe od name lub równe name i równe id, czyli
select * from items where name > 'bbb' or (name = 'bbb' and id = 4) order by name
ps. 'bbb' możesz wyciągnąć podzapytaniem

Dzięki za pomoc jednak to dalej nie to. Dodałem kolejne id o name bbb i już się nie wyświetla

screenshot-20220804030131.png

1

To podobnie jak podał abrakadaber, tylko zamiast or (name = 'bbb' and id = 4) zrób or (name = 'bbb' and id >= 4)

2
;with t1 as (	
	select ROW_NUMBER() over(order by name) rownumber
		, y.*  from yourtable y
)
select t1.ID, t1.name
from t1
where t1.rownumber >= (select twew.rownumber from t1 twew where twew.ID = 4)
order by  t1.name

1 użytkowników online, w tym zalogowanych: 0, gości: 1