Estou tentando usar o MySQL para criar uma exibição com a cláusula "WITH"
WITH authorRating(aname, rating) AS
SELECT aname, AVG(quantity)
FROM book
GROUP BY aname
Mas não parece que o MySQL suporta isso.
Achei que isso era bastante padrão e tenho certeza que o Oracle suporta isso. Existe alguma maneira de forçar o MySQL a usar a cláusula "WITH"? Eu tentei com o motor MyISAM e innoDB. Ambos não funcionam.
fonte
Você pode estar interessado em algo como este:
fonte
Subquery
é o nome que usei para a própria tabela derivada. Quando você usa,from ( ... )
você cria algo como uma tabela temporária (uma tabela derivada) e requer um nome. É por isso que useias Subquery
. Respondendo à sua pergunta, sim, você pode, mas você terá que colocar um nome na tabela derivada externa (logo antes deGroup By
). Espero que tenha ajudado.Você tem a sintaxe certa:
No entanto, como outros mencionaram, o MySQL não oferece suporte a este comando. COM foi adicionado no SQL: 1999; a versão mais recente do padrão SQL é SQL: 2008. Você pode encontrar mais algumas informações sobre bancos de dados que suportam os vários recursos do SQL: 1999 na Wikipedia .
O MySQL tradicionalmente ficou um pouco atrasado no suporte ao padrão SQL, enquanto bancos de dados comerciais como Oracle, SQL Server (recentemente) e DB2 os seguiram um pouco mais de perto. PostgreSQL também é normalmente bastante compatível com os padrões.
Você pode querer dar uma olhada no roadmap do MySQL; Não tenho certeza de quando esse recurso pode ser compatível, mas é ótimo para criar consultas de roll-up legíveis.
fonte
A Oracle oferece suporte a WITH.
Seria assim.
@ysth COM é difícil de pesquisar no Google porque é uma palavra comum normalmente excluída das pesquisas.
Você gostaria de examinar a documentação do SELECT para ver como funciona a fatoração de subconsulta.
Eu sei que isso não responde ao OP, mas estou limpando qualquer confusão que possa ter começado.
fonte
Com base na resposta de @Mosty Mostacho, aqui está como você pode fazer algo equivalente no MySQL, para um caso específico de determinar quais entradas não existem em uma tabela e não estão em nenhum outro banco de dados.
Você pode usar um editor de texto com recursos de macro para converter uma lista de valores para a cláusula de união selecionada entre aspas.
fonte
MariaDB agora oferece suporte a WITH. O MySQL por enquanto não é. https://mariadb.com/kb/en/mariadb/with/
fonte
fonte
Você já experimentou a Tabela Temporária? Isso resolveu minha conversão:
Então você pode usar esta tabela em cada seleção nesta sessão:
fonte