sql >> Databasteknik >  >> RDS >> Mysql

Hur skriver jag en enkel urvalsfråga istället för att använda vyer?

Vad du behöver är en HAVING sats för att hitta COUNT(*) = 2 efter att ha grupperats efter datum och specialitet. I själva verket borde ingen häckning ens vara nödvändig. (Jag har även ersatt din implicita koppling med kommaseparerad FROM sats med en explicit JOIN , vilket är den mer föredragna moderna syntaxen).

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 lista här och GROUP BY ska ge patient-id, specialitet, datum och antalet besök för den sammanlagda kombinationen av dessa tre kolumner. HAVING klausulen begränsar det sedan till endast de med 2 besök för gruppen.

För att dra bara patienterna från detta, slå in det i en underfråga:

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. Hur returnerar man flera rader från PL/pgSQL-funktionen?

  2. MySQL DATE_ADD användning, 5 dagars intervall

  3. ListView Control Tutorial-02

  4. 2 sätt att kontrollera om dataåtkomst är aktiverad i SQL Server (T-SQL-exempel)