Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да напиша проста заявка за избор, вместо да използвам изгледи?

Това, от което се нуждаете, е HAVING клауза за намиране на COUNT(*) = 2 след групиране по дата и специалност. Всъщност не трябва дори да е необходимо гнездене. (Също така замених вашето неявно присъединяване с разделени със запетая FROM клауза с изричен 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
/* 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 списък тук и GROUP BY трябва да предостави идентификационния номер на пациента, специалността, датата и броя на посещенията за общата комбинация от тези 3 колони. HAVING клауза след това го ограничава само до тези с 2 посещения за групата.

За изтегляне само пациентите от това, увийте го в подзаявка:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Загуба на връзка с MySQL след известно време и не се свързва отново

  2. MySql SELECT съюз за различни колони?

  3. Не може да се свърже с mysql чрез сървлет

  4. списъкът за показване на приятелски потребител не показва всички потребители

  5. Как мога да използвам ON DUPLICATE KEY UPDATE в PDO с mysql?