Eu tenho um problema com minhas consultas no MySQL. Minha tabela tem 4 colunas e é algo como isto:
id_users id_product quantity date
1 2 1 2013
1 2 1 2013
2 2 1 2013
1 3 1 2013
id_users
e id_product
são chaves estrangeiras de tabelas diferentes.
O que eu quero é excluir apenas uma linha:
1 2 1 2013
Que aparece duas vezes, então eu só quero excluí-lo.
Eu tentei esta consulta:
delete from orders where id_users = 1 and id_product = 2
Mas ele excluirá os dois (já que eles são duplicados). Alguma dica para resolver esse problema?
mysql
delete-row
Dani
fonte
fonte
Todas as tabelas devem ter uma chave primária (consistindo em uma única ou várias colunas), linhas duplicadas não fazem sentido em um banco de dados relacional. Você pode limitar o número de linhas de exclusão usando
LIMIT
:Mas isso apenas resolve o problema atual, você definitivamente deve trabalhar no problema maior definindo chaves primárias.
fonte
Você precisa especificar o número de linhas que devem ser excluídas. No seu caso (e presumo que você deseja apenas manter um), isso pode ser feito assim:
fonte
A melhor maneira de criar uma tabela é adicionar uma linha temporária como incremento automático e manter como chave primária. Para que possamos evitar esses problemas acima.
fonte
Já existem respostas para Excluir linha por
LIMIT
. Idealmente, você deve ter a chave primária em sua tabela. Mas se não houver.Vou dar outras maneiras:
Vejo id_users e id_product devem ser únicos no seu exemplo.
Isso excluirá linhas duplicadas com os mesmos dados.
Mas se você ainda receber um erro, mesmo se usar a cláusula IGNORE, tente o seguinte:
Se houver várias linhas com valores duplicados, você também poderá recriar a tabela
fonte
Você deve adicionar um ID que incremente automaticamente para cada linha, depois disso você pode excluir a linha pelo seu ID. para que sua tabela tenha um ID exclusivo para cada linha e o id_user, id_product ecc ...
fonte