2013-05-08 14 views
6

Mam 2 tabele: tblRider i tbl_SCORE. tblRider zawiera wszystkie informacje o wszystkich zawodnikach (zawodnikach), aw tbl_SCORE zapisane są wszystkie wyniki zawodników. Chcę zaktualizować kolumnę HalfPipeFinal w tblRider. Standardowo ta kolumna jest ustawiona na 0, ale chcę ustawić ją na 1 dla zawodników z 20 najlepszymi wynikami. (Tak tylko 20 najlepszych zawodników mogą wziąć udział w finale i tych, którzy nie mają 1 w kolumnie HalfPipeRider)Jak napisać zapytanie z łączeniem, aktualizacją i zamawianiem według?

To moje zapytanie:

UPDATE tblRider 
JOIN tbl_SCORE ON tblRider.riderID = tbl_SCORE.riderID 
SET tblRider.HalfPipeFinal = 1 
WHERE `gameID` =35 
ORDER BY `score` DESC 
limit 20;** 

Jeśli uruchomić tej kwerendy uzyskać ten błąd: " Błędne użycie UPDATE i ZAMÓWIENIA " Więc poszedłem szukać i najwyraźniej nie można używać aktualizacji i porządku przez join. Więc szukam innego sposobu napisania tego zapytania bez zamówienia przez niego, ale nie mogę go znaleźć.

Cała pomoc jest doceniana. Dzięki

+0

Nie możesz uruchomić tego zapytania bez "zamówienia przez" .. ?? co wyświetlił komunikat błędu? –

Odpowiedz

11

W SQL nie można mieć ORDER BY jako część samego UPDATE. Ale można zrobić filtr podzapytanie, nadać mu aliasu i dołączyć go ...

UPDATE tblRider r 
JOIN 
(
    SELECT riderID 
    FROM tbl_SCORE 
    WHERE gameID = 35 
    ORDER BY score DESC 
    LIMIT 20 
) s 
ON r.riderID = s.riderID 
SET r.HalfPipeFinal = 1; 
+0

Dziękuję bardzo! – user2362951

+0

@ user2362951 można oznaczyć jako odpowiedź. A jeśli nie, to mam nadzieję, że kilka głosów w górę tego jednego dnia ... z góry :) – davmos

+0

Działa to tylko jeśli warunek WHERE dotyczy tylko drugiej tabeli :( – matteo

3

Off górze mojej głowie i bez konieczności sesję SQL otwarty przetestować ten można spróbować ...

UPDATE tblRider 
SET HalfPipeFinal = 1 
WHERE riderID 
IN 
(
    SELECT s.riderID 
    FROM tbl_SCORE 
    ORDER BY s.score 
    DESC limit 20 
) 

Chociaż IN (subselect) może mieć nieprzyjemne kary za wydajność.

Powiązane problemy