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

Използване на присъединяване с три таблици, когато полето може да е нула

Правите ININER JOIN, но имате нужда от OUTER JOIN, по-специално, LEFT JOIN. С LEFT JOIN, таблицата "отляво" винаги се присъединява и ако няма съответствие, полетата на таблицата отдясно се задават на null. Разликата е обяснена много добре в тази страницата на уикипедия .

След това трябва да групирате редовете със същия идентификатор на подаване и да преброите колко редове са били групирани, като внимавате, че ако едно подаване има само един коментар, а друго няма никакъв, и двете имат по 1 групиран ред... Ако едно подаване няма коментари , в следващата заявка c.submissionid ще бъде нула, така че

Вашият SQL може да бъде

SELECT s.loginid, s.title, s.url, s.displayurl, l.username, c.submissionid, 
IF(c.submissionid IS NULL, 0, COUNT(*))  AS countComments
FROM submission AS s
INNER JOIN login AS l ON l.loginid = s.loginid
LEFT JOIN comments AS c ON c.submissionid = s.id
GROUP BY (s.id)
ORDER BY s.datesubmitted DESC
LIMIT 10

Може да има грешки, не съм тествал заявката... Но се надявам да съм ви дал правилната идея, това е разликата между външните и вътрешните свързвания.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Няма достъп до Amazon RDS чрез Eclipse

  2. php mysql изчисляване на последователни редове

  3. java.sql.Разширение за връзка за SSH

  4. Не може да се прехвърли обект от тип 'System.DBNull' към тип 'System.Byte[]'.

  5. Как да извлечете записи за съвпадение в множество таблици в MySQL