SubSelect com condição da Select

03/12/2015

9

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);
Responder

Post mais votado

03/12/2015

Ajuda sim Alan obrigado pessoal salvou meu dia
Responder

Mais Posts

03/12/2015

Marcos P

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

O exemplo abaixo é baseado na própria documentação do MySql :

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


Tente adaptar teu código a partir disso...
Responder
Cara simplesmente valeu
Responder
Cara deu ruim a tabela da select e da sub são a mesma tabela
Responder

03/12/2015

Marcos P

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 !
Responder

03/12/2015

Alan Mario

Ajuda um conteudo a mais?

[url]http://www.inf.ufsc.br/~ronaldo/ine5323/SQL-subconsultas.pdf[/url]
Responder
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.
Responder

03/12/2015

Alan Mario

De nada Ricardo.
Responder

03/12/2015

Marcos P

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 )
Responder
Esta dando problema porque o MySQL esta varrendo todas as partições.
Responder

03/12/2015

Marcos P

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...
Responder
O que acontece é que essa minha select esta lento porque query depende da subquery.E fica testando todos os registros
Responder

03/12/2015

Marcos P


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 !
Responder
Sim é isso mesmo
Responder

04/12/2015

Marcos P

Legal !
Responder