Próbuję użyć MySQL, aby utworzyć widok z klauzulą „WITH”
WITH authorRating(aname, rating) AS
SELECT aname, AVG(quantity)
FROM book
GROUP BY aname
Ale wygląda na to, że MySQL nie obsługuje tego.
Myślałem, że to dość standardowe i jestem pewien, że Oracle to obsługuje. Czy mimo wszystko można zmusić MySQL do używania klauzuli „WITH”? Wypróbowałem to z silnikiem MyISAM i innoDB. Oba nie działają.
Może Cię zainteresuje coś takiego:
źródło
Subquery
to nazwa, której użyłem dla samej tabeli pochodnej. Kiedy używaszfrom ( ... )
, tworzysz coś w rodzaju tabeli tymczasowej (tabeli pochodnej) i wymaga ona nazwy. Dlatego użyłemas Subquery
. Odpowiadając na twoje pytanie, tak, możesz, ale będziesz musiał umieścić nazwę w zewnętrznej tabeli pochodnej (tuż przedGroup By
). Mam nadzieję, że to pomogło.Masz właściwą składnię:
Jednak, jak wspominali inni, MySQL nie obsługuje tego polecenia. Dzięki został dodany w SQL: 1999; najnowsza wersja standardu SQL to SQL: 2008. Więcej informacji na temat baz danych obsługujących różne funkcje SQL: 1999 można znaleźć w Wikipedii .
MySQL tradycyjnie ma nieco opóźnienia w obsłudze standardu SQL, podczas gdy komercyjne bazy danych, takie jak Oracle, SQL Server (ostatnio) i DB2, podążały za nimi nieco bliżej. PostgreSQL jest również zazwyczaj dość zgodny ze standardami.
Możesz spojrzeć na mapę drogową MySQL; Nie jestem do końca pewien, kiedy ta funkcja może być obsługiwana, ale świetnie nadaje się do tworzenia czytelnych zapytań zbiorczych.
źródło
Oracle obsługuje dzięki.
Tak by wyglądało.
@ysth WITH jest trudne do wyszukania w Google, ponieważ jest to popularne słowo, które jest zwykle wykluczane z wyszukiwania.
Warto przyjrzeć się dokumentom SELECT, aby zobaczyć, jak działa faktoring podzapytań.
Wiem, że to nie odpowiada na OP, ale usuwam wszelkie zamieszanie, które mogło się rozpocząć.
źródło
Opierając się na odpowiedzi z @Mosty Mostacho, oto jak możesz zrobić coś równoważnego w MySQL, dla konkretnego przypadku określenia, które wpisy nie istnieją w tabeli i nie znajdują się w żadnej innej bazie danych.
Możesz użyć edytora tekstu z funkcjami makr, aby przekonwertować listę wartości na cytowaną w cudzysłów klauzulę select union.
źródło
MariaDB obsługuje teraz WITH. MySQL na razie nie jest. https://mariadb.com/kb/en/mariadb/with/
źródło
źródło
Czy kiedykolwiek próbowałeś stołu tymczasowego? To rozwiązało moją konwergencję:
Następnie możesz użyć tej tabeli przy każdym wyborze w tej sesji:
źródło