sql >> Databáze >  >> RDS >> Mysql

Jak napíšu jednoduchý výběrový dotaz namísto použití zobrazení?

Co potřebujete, je HAVING klauzule k nalezení COUNT(*) = 2 po seskupení podle data a speciality. Ve skutečnosti by žádné hnízdění nemělo být ani nutné. (Vaše implicitní spojení jsem také nahradil čárkami oddělenými FROM klauzule s explicitním JOIN , což je preferovanější moderní syntaxe).

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 seznam zde a GROUP BY by měl pro souhrnnou kombinaci těchto 3 sloupců vytvořit ID pacienta, specializaci, datum a počet návštěv. HAVING klauzule pak jej omezuje pouze na ty, kteří mají 2 návštěvy pro skupinu.

Chcete-li vytáhnout pouze pacienti z tohoto, zabalte to do dílčího dotazu:

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. Jak předat více proměnných do PHP pomocí jQuery

  2. Rails Migration mění sloupec pro použití polí Postgres

  3. Jak zobrazit všechny názvy tabulek z konkrétní databáze mysql v php

  4. MySQL Dotaz k vytažení položek, ale vždy zobrazí určitou nahoře