Скажем, у меня есть 2 стола, человек и работа.
+--------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| job_id | int(11) | NO | | NULL | |
+--------+--------------+------+-----+---------+----------------+
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| j_id | int(11) | NO | PRI | NULL | auto_increment |
| j_name | varchar(255) | NO | | NULL | |
| j_active | tinyint(1) | NO | | 0 | |
+----------+--------------+------+-----+---------+----------------+
Как я могу выбрать, где он возвращает job_id
где j_active = 1
, а в противном случае - 0 или NULL? Итак, я бы хотел, чтобы всегда возвращал всех лиц, но когда их работа неактивна, я не хочу возвращать свой идентификатор работы
select * from person p left join job j on p.job_id=j.j_id and j.j_active=1
Заявление должно работать. Что-то вроде:
select name, case when j_active=1 then job_id else null end as job_id
from person join job on (person.job_id=job.j_id)
job_id
?