Omar~ 87 Denunciar post Postado Julho 2, 2018 Vou simplificar porque se explicar com detalhes a situação vai muitas linhas então: Preciso realizar tal tarefa: Selecionar 2 tabelas distintas cujo possuem os mesmos valores e ver se tal campo exite em qualquer uma delas. Obs.: Nunca haverá os mesmos registros em ambas Exemplo: se tabela_1 tem o nome joão na tabela_2 não terá joão e virse-versa. Então preciso saber se tem joão na tb1 ou na 2 logo preciso trazer os resultados dos campos da tabela que contenha o resultado que buscar. Certo esse seria o exemplo genérico: <?php $mail = 'fulano@fulano.com'; $query = "SELECT mail FROM tabela_a WHERE mail = :datamail UNION SELECT mail FROM tabela_b WHERE mail = :datamail"; Então se existir o e-mail na tabela A ou B o resultado é true. Porém dessa forma não dar para trazer os demais campos da tabela cujo o resultado exista, em base ambas tabelas também possuem a coluna 'hash' e é esse dado que preciso capturar. A questão é dar para fazer com um select só? Como? Porque do contrário só me vem a cabeça consultar independentemente cada tabela e se houver resultado usar a consulta. Compartilhar este post Link para o post Compartilhar em outros sites
BrunoBit 82 Denunciar post Postado Julho 3, 2018 Fala Omar. Fiz uns testes aqui, essa query funciona exatamente da forma como você quer: SELECT * FROM ( SELECT mail,name FROM tabela_a WHERE mail = :datamail UNION SELECT mail,name FROM tabela_b WHERE mail = :datamail ) t GROUP BY mail,name HAVING count(*) = 1 Se houver o mesmo email em ambas as tabelas, ele retorna com os resultados, se não houver, retorna nada. Só não te explico detalhadamente o pq que funciona pq eu preciso estudar mais sobre group by e having, mas essa query achei no stack e lá tem a explicação: https://stackoverflow.com/questions/17411866/how-can-i-compare-if-2-tables-have-the-same-data Obs: toma cuidado na hora de copiar e colar o código do fórum, pq com as atualizações recentes, ta com um bug de characteres, dependendo da sua ide, se copiar e colar o código a ide não vai reconhecer alguns characteres e ai o código vai quebrar, tem que testar aí. Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Julho 3, 2018 Creio que o que você quer seja isso: SELECT id, email FROM ( SELECT id, email FROM tabela1 UNION SELECT id, email FROM tabela2 ) WHERE email IN ('fdsfds@fdsfxsda.com', 'email@dominio.com.br', 'exemplo@outo_dominio.com.br') GROUP BY email Coloquei id no meio apenas para você ver que dá pra pegar outras colunas. Você iria substituir isso pelo hash. Primeiro você une tudo, depois filtra e com o IN você faz isso em apenas uma consulta. A questão é: se a quantidade de e-mails for extremamente grande, não sei na prática o que seria mais rápido... só testando. De qualquer forma, suspeito que assim seja bastante eficiente para o propósito. Apenas certifique-se de tornar email um índice, em cada uma das tabelas. Ah, e não se assuste com o uso de UNIONs. Se você usasse um JOIN ou select de mais de uma tabela, o resultado não seria muito diferente, pois internamente o banco está fazendo mais de uma consulta de qualquer forma. EDIT: Ah, lembrei que você pode querer saber de qual tabela vem cada resultado. Nesse caso faça isso: SELECT id, email, origem FROM ( SELECT id, email, 1 origem FROM tabela1 UNION SELECT id, email, 2 origem FROM tabela2 ) t WHERE email IN ('fdsfds@fdsf.com', 'dassadaasd@tox123dsdsa.com') GROUP BY email Assim iria retornar 3 colunas: id, email e origem. Origem seria sempre 1 ou 2, baseado na tabela de origem dos dados. Compartilhar este post Link para o post Compartilhar em outros sites
Omar~ 87 Denunciar post Postado Julho 3, 2018 Valeu pena ajuda pessoal, mas não rolou.... É tenso pegar sistema zuado feito por outra pessoa, dar uma dor de cabeça arrumar as coisas sem ter que alterar as estrutura da base de dados. Enfim foi o jeito fazer o select em cada tabela, naquela que tem o valor executo o que tenho de fazer... Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Julho 3, 2018 Não faz sentido não ter resolvido conforme os dois exemplos. São exemplos funcionais e fazem o que foi solicitado. Compartilhar este post Link para o post Compartilhar em outros sites
BrunoBit 82 Denunciar post Postado Julho 3, 2018 Que erro que deu quando você executou as querys? Compartilhar este post Link para o post Compartilhar em outros sites