sql >> Database teknologi >  >> RDS >> Mysql

Hvordan skriver jeg en simpel valgforespørgsel i stedet for at bruge visninger?

Det du har brug for er en HAVING klausul for at finde COUNT(*) = 2 efter gruppering efter dato og speciale. Faktisk burde det ikke engang være nødvendigt at bygge rede. (Jeg har også erstattet din implicitte joinforbindelse med kommasepareret FROM klausul med en eksplicit JOIN , som er den mere foretrukne moderne syntaks).

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 */
 

SELECT liste her og GROUP BY skal producere patient-id, speciale, dato og antallet af besøg for den samlede kombination af disse 3 kolonner. HAVING klausul begrænser det så til kun dem med 2 besøg for gruppen.

For at trække kun patienterne fra dette, pakke det ind i en underforespørgsel:

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

  1. 3 måder at få sproget for den aktuelle session i SQL Server (T-SQL)

  2. Udløsning af et Java-program baseret på databaseopdateringer og tidsinterval

  3. Får en Entity Framework-fejl ved at køre migreringer på en MySQL-database. Forkert brug af rumligt/fuldtekst/hash-indeks og eksplicit indeksrækkefølge

  4. Få kun cifre ved hjælp af regexp