sql >> Database >  >> RDS >> Mysql

Hoe schrijf ik een eenvoudige selectiequery in plaats van views te gebruiken?

Wat je nodig hebt is een HAVING clausule om COUNT(*) = 2 . te vinden na groepering op datum en specialiteit. In feite zou nesten zelfs niet nodig moeten zijn. (Ik heb je impliciete join ook vervangen door komma's gescheiden FROM clausule met een expliciete JOIN , wat de meer geprefereerde moderne syntaxis is).

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

De SELECT lijst hier en GROUP BY moet de patiënt-ID, specialiteit, datum en het aantal bezoeken produceren voor de totale combinatie van die 3 kolommen. De HAVING clausule beperkt het dan tot alleen degenen met 2 bezoeken voor de groep.

Om alleen te trekken de patiënten hiervan, wikkel het in een subquery:

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. mysql cte . gebruiken met en invoegen waarschuwt een syntaxisfout

  2. Begin met een hoofdletter van elk woord, in bestaande tabel

  3. Hoe linker join uit te voeren in Hibernate Query Language?

  4. Is de volgorde van tabellen waarnaar wordt verwezen in de ON-clausule van de JOIN van belang?