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

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

Трябва да поставите потребителската проверка в присъединяването, а не в условието where, като така:

SELECT c.course_id,l.topic,l.id,l.vid_duration,p.* 
FROM courses c 
LEFT JOIN lessons l ON l.course_id=c.course_id  
LEFT JOIN progress p ON l.id = p.lesson_id and p.user_id = :userid
WHERE c.slug = :course 

Причината да се направи това е, че JOINS използват "лявото присъединяване" (което е имплицитно външно присъединяване). Този тип свързване означава, че ако условието работи, връща всички данни от колоната за тази таблица за този ред.. ако цялото условието не работи, то ще върне всички данни за таблици, споменати по-рано, но за таблицата, спомената в реда, ще върне NULLS за всички тези колони.

Извинявам се за това описание, тъй като е трудно да се изрази с думи как точно работи сложното външно (или ляво) присъединяване, без да става дума за много думи.




  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 Alter Stored Procedure

  2. SQL SERVER – Трик – Изпълняване на SSMS с различен акаунт в Windows

  3. Как мога да възстановя пълните привилегии на root потребителя на MySQL?

  4. SQL филтриране по множество колони

  5. PHP не може да разреши името на контейнера mysql при определени обстоятелства