AM usando MySQL 5.7.13 em meu PC com Windows com servidor WAMP
Aqui, meu problema é ao executar esta consulta
SELECT *
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
`status` = 'Active'
GROUP BY `proof_type`
Estou sempre recebendo erros como este
A expressão # 1 da lista SELECT não está na cláusula GROUP BY e contém a coluna não agregada 'returntr_prod.tbl_customer_pod_uploads.id' que não é funcionalmente dependente de colunas na cláusula GROUP BY; isso é incompatível com sql_mode = only_full_group_by
Você pode me dizer a melhor solução ...
Eu preciso de resultados como
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
| id | user_id | load_id | bill_id | latitude | langitude | proof_type | document_type | file_name | is_private | status | createdon | updatedon |
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
| 1 | 1 | 78 | 1 | 21.1212 | 21.5454 | 1 | 1 | id_Card.docx | 0 | Active | 2017-01-27 11:30:11 | 2017-01-27 11:30:14 |
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
mysql
group-by
mysql-error-1055
Dhanu K
fonte
fonte
SELECT *
.tbl_customer_pod_uploads
WHEREload_id
= '78' ANDstatus
= 'Active' GROUP BYproof_type
only_full_group_by
modo SQL.tbl_customer_pod_uploads
WHEREload_id
= '78' ANDstatus
= 'Ativo' GROUP BYproof_type
Respostas:
este
será simplesmente resolvido alterando o modo sql no MySQL por este comando,
Isso também funciona para mim .. Eu usei isso, porque em meu projeto existem muitas consultas como esta, então eu apenas alterei este modo sql para only_full_group_by
Obrigado... :-)
fonte
Quando o
only_full_group_by
modo MySQL está ativado, isso significa que regras estritas ANSI SQL serão aplicadas durante o usoGROUP BY
. Com relação à sua consulta, isso significa que, se você forGROUP BY
daproof_type
coluna, poderá selecionar apenas duas coisas:proof_type
coluna, ouPor "agregados" de outras colunas, quer dizer usando uma função de agregação, tais como
MIN()
,MAX()
, ouAVG()
com outra coluna. Portanto, no seu caso, a seguinte consulta seria válida:A grande maioria das
GROUP BY
perguntas do MySQL que vejo no SO tem o modo estrito desativado, então a consulta está em execução, mas com resultados incorretos. No seu caso, a consulta não será executada, forçando você a pensar no que realmente deseja fazer.Nota: O ANSI SQL estende o que pode ser selecionado
GROUP BY
, incluindo também colunas que são funcionalmente dependentes da (s) coluna (s) selecionada (s). Um exemplo de dependência funcional seria o agrupamento por uma coluna de chave primária em uma tabela. Como a chave primária tem garantia de ser única para cada registro, portanto, o valor de qualquer outra coluna também seria determinado. MySQL é um dos bancos de dados que permite isso (SQL Server e Oracle não AFAIK).fonte
GROUP BY
quase sempre é uma má ideia. Me assusta que tantos usuários estejam seguindo conselhos errados e usando-os.Use qualquer solução
(1) PHPMyAdmin
se você estiver usando phpMyAdmin, altere a configuração " sql_mode " conforme mencionado na imagem abaixo.
Edite a variável "modo sql" e remova o texto "ONLY_FULL_GROUP_BY" do valor
(2) SQL / Prompt de comando Execute o comando abaixo.
(3) ** Não use SELECT ***
Use a coluna relevante na consulta SELECT. relevante significa colunas, que vêm na cláusula "group by" ou coluna com a função agregada (MAX, MIN, SUM, COUNT etc)
Nota importante
As alterações feitas usando o ponto (1) OU o ponto (2) não o definirão PERMANENTEMENTE e ele será revertido após cada reinicialização.
Portanto, você deve definir isso em seu arquivo de configuração (por exemplo, /etc/mysql/my.cnf na seção [mysqld]), para que as alterações permaneçam em vigor após a reinicialização do MySQL:
Arquivo de configuração : /etc/mysql/my.cnf
Nome da variável : sql_mode OR sql-mode
fonte
O método abaixo resolveu meu problema:
No ubuntu
Tipo:
sudo vi /etc/mysql/my.cnf
digite A para entrar no modo de inserção
Na última linha, cole o código de duas linhas abaixo:
Digite esc para sair do modo de entrada
Digite
sudo service mysql restart
para reiniciar o MySQL.fonte
Você pode desativar sql_mode = only_full_group_by por algum comando, você pode tentar isso por terminal ou MySql IDE
fonte
No Ubuntu
Passo 1:
Etapa 2: vá para a última linha e adicione o seguinte
Etapa 3: Salvar
Etapa 4: Reinicie o servidor mysql.
fonte
Você pode resolvê-lo alterando o modo sql com este comando:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
e ... lembre-se de reconectar o banco de dados !!!
fonte
vá para o phpmyadmin e abra o console e execute esta solicitação
fonte
Procure por "modo SQL" se estiver usando PhpMyAdmin e retire o valor:,
ONLY_FULL_GROUP_BY
acabei de fazer e está tudo bem.fonte
Pelo que parece, acho que agrupar por várias colunas / campos não vai prejudicar o seu resultado. Por que você não tenta adicionar ao grupo desta forma:
Isso irá agrupar
proof_type
primeiro entãoid
. Espero que isso não altere os resultados. Em alguns / na maioria dos casos, agrupar por várias colunas dá resultados errados.fonte
Entre abaixo
Ctrl + O => Y = Ctrl + X
fonte
Olá, em vez de pegar todas as colunas, pegue apenas o que precisa usando
ANY_VALUE(column_name)
. Está funcionando perfeitamente. Apenas verifique.Por exemplo:
fonte
Isso é tudo.
Eu fiz isso no meu Ec2 e funcionou como um encanto.
fonte
Esta é uma maneira muito rápida e fácil de configurá-lo permanentemente
NB: a execução
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
é temporária e na reinicialização do servidor você ainda vai acabar com o erro. Para corrigir isso permanentemente, faça o seguintewget https://gist.githubusercontent.com/nfourtythree/90fb8ef5eeafdf478f522720314c60bd/raw/disable-strict-mode.sh
chmod +x disable-strict-mode.sh
./disable-strict-mode.sh
E pronto, as alterações serão feitas no mysql e ele será reiniciado
fonte
Atualização para MySQL 8.0
Você
sql-mode
não teráNO_AUTO_CREATE_USER
, pois foi removido conforme mencionado aqui - how-to-set-sql-mode-in-my-cnf-in-mysql-8Além disso, se alguém não tiver um
my.cnf
arquivo, deve criar um novo/etc/my.cnf
e adicionar as linhas acima.fonte
No seu
my.ini
, escreva isto:depende da sua versão. Ou:
ou simplesmente remova este:
ONLY_FULL_GROUP_BY
fonte
Abra o painel WAMP e abra o arquivo de configuração do MySQL. Nele, procure por "sql_mode" se você encontrá-lo, configure-o para "", caso contrário, adicione sql_mode = "" ao arquivo.
Reinicie o servidor MySQL e você está pronto para ir ...
codificação feliz.
fonte