У меня возникли некоторые трудности, связанные с этой проблемой.Я уверен, что есть обходной путь, но я пытаюсь использовать один запрос.Я соединяю две таблицы с парой условий.Мне нужно вернуть все строки, соответствующие 't_id' (даже если NULL).Мне также нужно присоединить только данные, соответствующие 'e_id'.Если 'e_id' не существует, он должен вернуть NULL.Следующий запрос возвращает все нужные мне строки:
SELECT b.*, ev.* FROM blocks b
LEFT OUTER JOIN element_values ev ON ev.b_id = b.id
WHERE t_id = 1;
+----+------+-----------+-----+------+------+-----------------+
| id | t_id | type | pos | e_id | b_id | value |
+----+------+-----------+-----+------+------+-----------------+
| 1 | 1 | textinput | 1 | 1 | 1 | this is it edit |
| 2 | 1 | textinput | 0 | 1 | 2 | what is it |
| 5 | 1 | template | 2 | NULL | NULL | NULL |
+----+------+-----------+-----+------+------+-----------------+
Но добавление еще одного условия для 'e_id' вернет точные данные, но исключит третью строку, если она NULL (конечно).
SELECT b.*, ev.* FROM blocks b
LEFT OUTER JOIN element_values ev ON ev.b_id = b.id
WHERE t_id = 1 AND e_id = 1;
+----+------+-----------+-----+------+------+-----------------+
| id | t_id | type | pos | e_id | b_id | value |
+----+------+-----------+-----+------+------+-----------------+
| 1 | 1 | textinput | 1 | 1 | 1 | this is it edit |
| 2 | 1 | textinput | 0 | 1 | 2 | what is it |
+----+------+-----------+-----+------+------+-----------------+
Я ищу решение, в котором все три строки все еще возвращаются, если 'e_id' не существует.Например, при последнем запросе, когда я передаю 'e_id = 2', набор будет пустым.Но мне нужно, чтобы он по-прежнему возвращал все строки, равные 't_id'.
Любые мысли полезны.
Спасибо!