Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como escrevo uma consulta de seleção simples em vez de usar visualizações?


O que você precisa é de um HAVING cláusula para encontrar COUNT(*) = 2 após agrupamento por data e especialidade. Na verdade, nenhum aninhamento deveria ser necessário. (Também substituí sua junção implícita por FROM separada por vírgulas cláusula com um JOIN explícito , que é a sintaxe moderna mais preferida).
SELECT 
  v.pid,
  d.speciality,
  v.date,
  COUNT(COUNT DISTINCT d.did) AS numvisits
FROM 
  visits v
  JOIN Doctors d ON v.did = d.did
GROUP BY v.pid, d.speciality, v.date
HAVING COUNT(COUNT DISTINCT d.did) = 2
/* Note - depending on your RDBMS, you may
   be able to use the count alias as
HAVING numvisits = 2 
   MySQL allows this, for ex, but MS SQL Server doesn't and I think Oracle doesn't */

O SELECT liste aqui e GROUP BY deve produzir a identificação do paciente, especialidade, data e o número de visitas para a combinação agregada dessas 3 colunas. O HAVING cláusula limita-o a apenas aqueles com 2 visitas para o grupo.

Para puxar somente os pacientes disso, envolva-o em uma subconsulta:
SELECT Patients.* 
FROM Patients JOIN (
  SELECT 
    v.pid,
    d.speciality,
    v.date,
    COUNT(COUNT DISTINCT d.did) AS numvisits
  FROM 
    visits v
    JOIN Doctors d ON v.did = d.did
  GROUP BY v.pid, d.speciality, v.date
  HAVING COUNT(COUNT DISTINCT d.did) = 2
) subq ON Patients.pid = subq.pid