SubSelect com condição da Select

MySQL

03/12/2015

Bem pessoal eu preciso fazer algo bem confuso em MySQL.
Tenho uma subselect que conta o numero de registros dentro de uma select só que essa subselect tem que ter uma condição que relaciona um campo da select.

A select:
SELECT nome,telefone FROM cadastro;
subselect
Select Count(*) FROM cadastro where nome(da subselect)=nome(da select);
Arthur Scarpelli

Arthur Scarpelli

Curtidas 0

Melhor post

Arthur Scarpelli

Arthur Scarpelli

03/12/2015

Ajuda sim Alan obrigado pessoal salvou meu dia
GOSTEI 1

Mais Respostas

Marcos P

Marcos P

03/12/2015

O alias dado na tabela do SELECT é visível dentro da SUBQUERY.

O exemplo abaixo é baseado na própria [url:descricao=documentação]http://dev.mysql.com/doc/refman/5.7/en/subqueries.html[/url] do MySql :

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2 WHERE nome = t1.nome);


Tente adaptar teu código a partir disso...
GOSTEI 0
Arthur Scarpelli

Arthur Scarpelli

03/12/2015

Cara simplesmente valeu
GOSTEI 0
Arthur Scarpelli

Arthur Scarpelli

03/12/2015

Cara deu ruim a tabela da select e da sub são a mesma tabela
GOSTEI 0
Marcos P

Marcos P

03/12/2015

Sem problema, você pode usar na subquery a mesma tabela do select principal...

Como exemplo, uma vez que o código abaixo não tem muita lógica, fica assim :


SELECT * FROM t1 aliasPRINCIPAL WHERE column1 = (SELECT column1 FROM t1 WHERE nome = aliasPRINCIPAL.nome);


Só preste atenção para não tornar isso aí recursivo e acabar gerando deadlock no banco !
GOSTEI 0
Alan Mario

Alan Mario

03/12/2015

Ajuda um conteudo a mais?

[url]http://www.inf.ufsc.br/~ronaldo/ine5323/SQL-subconsultas.pdf[/url]
GOSTEI 0
Arthur Scarpelli

Arthur Scarpelli

03/12/2015

SELECT *FROM tabela1 principal
where
DATEDIFF(CONCAT(
SUBSTR(data, 1, 4),
'-',
SUBSTR(data, 5, 2),
'-',
SUBSTR(data, 7, 2)
),curdate())<-20 and quantidade > (select Count(*) FROM tabela1 secudaria where secudaria.arquivo=principal.arquivo);

Gente executei essa select e o banco fica buscando e nunca me retorna.
GOSTEI 0
Alan Mario

Alan Mario

03/12/2015

De nada Ricardo.
GOSTEI 0
Marcos P

Marcos P

03/12/2015

Sempre que postar código no fórum use a tag "Inserir Codigo", isso ajuda muito a entender o que está acontecendo...

Quantos registros na tabela ?
Processamento local ou a base de dados está em outra máquina ?
Qual a chave primária nessa tabela ?
Existe índice por tabela.arquivo ?

Retire a condição por data, apenas para fins de debug ( depois que resolver a subquery, volte a colocá-la ) !
Substitua "Count(*)" por "Count(1)" ( que não envolve índices no banco, pois a contagem é feita por uma constante )
GOSTEI 0
Arthur Scarpelli

Arthur Scarpelli

03/12/2015

Esta dando problema porque o MySQL esta varrendo todas as partições.
GOSTEI 0
Marcos P

Marcos P

03/12/2015

Não tenho a menor ideia do que você quer dizer com :


...o MySQL esta varrendo todas as partições.


Vá no Fiddle, crie a estrutura da tabela e popule-a com alguns registros para teste.

Depois volte aqui e informe o link...
GOSTEI 0
Arthur Scarpelli

Arthur Scarpelli

03/12/2015

O que acontece é que essa minha select esta lento porque query depende da subquery.E fica testando todos os registros
GOSTEI 0
Marcos P

Marcos P

03/12/2015


Vá no Fiddle, crie a estrutura da tabela e popule-a com alguns registros para teste.

Depois volte aqui e informe o link...


Outra alternativa é você descrever, em português mesmo, qual o objetivo dessa query, pois deste o início isso não ficou muito claro !

Minha interpretação do formato atual da query é : retorne os dados da tabela, onde a coluna quantidade for maior que o numero de ocorrências de cada registro na própria tabela !

É isso ?

Se você respondesse as perguntas que lhe fiz, ficaria mais fácil te ajudar...


Quantos registros na tabela ?
Processamento local ou a base de dados está em outra máquina ?
Qual a chave primária nessa tabela ?
Existe índice por tabela.arquivo ?


Não é muito simples ficar "adivinhando" sua necessidade !
GOSTEI 0
Arthur Scarpelli

Arthur Scarpelli

03/12/2015

Sim é isso mesmo
GOSTEI 0
Marcos P

Marcos P

03/12/2015

Legal !
GOSTEI 0
POSTAR