Может быть, вы не хотите присоединяться, но используете EXISTS
?По крайней мере, так я интерпретирую ваше «мне нужно».
SELECT *
FROM task
WHERE task.pid = 0
AND EXISTS (SELECT *
FROM todo
WHERE todo.tid = task.id
AND todo.uid = 2
AND EXISTS (SELECT *
FROM timix
WHERE timix.id = todo.txid
AND timix.status = 0));
Или вы можете захотеть сохранить объединение в подзапросе.
SELECT *
FROM task
WHERE task.pid = 0
AND EXISTS (SELECT *
FROM todo
INNER JOIN timix
ON timix.id = todo.txid
WHERE todo.tid = task.id
AND todo.uid = 2
AND timix.status = 0);
Другой альтернативой может быть:
SELECT DISTINCT task.* FROM todo,task,timix WHERE task.id = todo.tid AND todo.uid=2 AND task.pid=0 AND timix.id = todo.txid AND timix.status = 0;
DISTINCT
выводит результат.(Но рассмотрите возможность использования явного синтаксиса JOIN
вместо варианта FROM table1, table2 WHERE table1.attribute1 = table2.attribute2
. Проще понять, что подразумевается под явным синтаксисом.)
Это зависит от вашей системы (данных, индексов), которая работает лучше всего.