Subquery bir cədvəl qaytarır
Və nəhayət üçüncü seçim - subquery bir tam cədvəl qaytarır. Bu ən çox rast gəlinən variantdır.
Çox vaxt biz müəyyən bir cədvəli bir az düzəltmək istəyirik. Və yalnız bundan sonra onu digər cədvəllə (JOIN ON operatoru vasitəsilə) birləşdiririk.
Gəlin ən sadə haldan başlayaq, burada iki cədvəli JOIN vasitəsilə birləşdirirdik:
SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id
Və sən yəqin ki, xatırlayırsan, task cədvəlində heç kimə yerləşdirilməmiş tapşırıqlar var: employee_id NULL-a bərabərdir.
Gəlin düzəldilmiş cədvəli yaradaq, burada bütün sahibsiz tapşırıqları direktora təyin edək (onun ID-si = 4).
Bunun üçün IFNULL() funksiyasından istifadə edək:
SELECT id, IFNULL(employee_id, 4) AS employee_id, name, deadline FROM task
Və bu sorğunun nəticəsi:
| id | employee_id | name | deadline |
|---|---|---|---|
| 1 | 1 | Frontend səhvini düzəltmək | 2022-06-01 |
| 2 | 2 | Backend səhvini düzəltmək | 2022-06-15 |
| 3 | 5 | Kofe almaq | 2022-07-01 |
| 4 | 5 | Kofe almaq | 2022-08-01 |
| 5 | 5 | Kofe almaq | 2022-09-01 |
| 6 | 4 | Ofisi təmizləmək | (NULL) |
| 7 | 4 | Həyatdan zövq almaq | (NULL) |
| 8 | 6 | Həyatdan zövq almaq | (NULL) |
Qırmızı rəngdə düzəldilmiş hücrə qeyd olunub.
İndi düzəldilmiş cədvəli sorğuya daxil edək:
SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id
task cədvəli yerinə.
Bu sorğu belə görünəcək:
SELECT * FROM employee e JOIN ( SELECT id, IFNULL(employee_id, 4) AS employee_id, name, deadline FROM task ) t ON e.id = t.emploee_id
Task sözü yerinə dairəvi mötərizələr və içində sorğu bədənini yerləşdirdik.
Beləliklə, biz vəziyyəti WITH operatoru ilə rahatlaşdırdıq.
WITH task2(id, employee_id, name, deadline) AS (SELECT id, IFNULL(employee_id, 4), name, deadline FROM task) SELECT * FROM employee e JOIN task2 t ON e.id = t.emploee_id
Bu, sənin işini xeyli rahatlaşdıracaq :)
GO TO FULL VERSION