Краткий ответ, да.
Более длинный ответ, перечитав ваш вопрос несколько раз, следующий будет работать, но не будет самым эффективным запросом в мире, я настоятельно призываю вас пересмотреть то, что вы пытаетесь выполнить, ибудет ли хорошей идеей реструктуризация таблицы.
Я выбрал INNER JOIN, поскольку вас интересуют только строки, соответствующие обоим критериям, и поэтому строки NULL не важны.Предложение HAVING обеспечивает вывод только тех строк, которые совпадают с обоими, в то время как ограничения table2 в предложении ON помогают ограничить влияние на производительность.
SELECT
table1.*,
COUNT(DISTINCT(table3.id)) AS numberOfMatches
FROM table1
INNER JOIN table2
ON table2.table1_id = table1.id
AND (
(table2.table3_id = 7 AND table2.name LIKE '%test%')
OR
(table2.table3_id = 1 AND table2.text_value LIKE '%fast update%')
)
INNER JOIN table3
ON table3.id = table2.table3_id
GROUP BY table1.id
HAVING numberOfMatches = 2
ORDER BY table1.id DESC