Как вернуть результаты в любом случае если нет связи в join и убрать все что не совпадают?
Очень большая проблема которую не могу решить несколько дней.
У меня есть таблица table2 которая связана с table1. И у каждого пользователя есть свой id, в таблице table2 может быть только одна запись для определенного t1id с userid.
Вот запросы для наглядности:
CREATE TABLE table1 (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100));
CREATE TABLE table2 (id INT AUTO_INCREMENT PRIMARY KEY, t1id INT, userid INT, state BOOLEAN);
INSERT INTO table1 (name) VALUES ('Mike'), ('Brad'), ('Ivan'), ('ktoto');
INSERT INTO table2 (t1id, userid, state) VALUES (1, 1, TRUE), (2, 1, FALSE), (4, 1, FALSE);
SELECT t1.name FROM table1 t1 LEFT JOIN table2 t2 ON t1.id = t2.t1id AND t2.userid = 1 AND t2.state = TRUE;
Мне нужен такой запрос который выдаст строки из table1 даже если в таблице table2 нету строк совпадающих по условию после ON. LEFT JOIN это делает. И одновременно с этим, если нашлась таблица в table2 связанная с table1 и последующие условия ложные, то убрать такую строку из запроса. LEFT JOIN вообще плевать, что те условия ложные как видите.
Выводится:
+-------+
| name |
+-------+
| Mike |
| Brad |
| Ivan |
| ktoto |
+-------+
Требуемый результат:
+-------+
| name |
+-------+
| Mike |
| Ivan |
+-------+
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
По-моему, требуется
SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.t1id
WHERE (t2.t1id IS NULL)
OR (t2.userid, t2.state) = (1, TRUE);