Следующий код - просто упрощенное описание, из-за набора данных структура запроса должна быть таким образом.
Я хочу найти записи, в которых значение может существовать в двух столбцах sub-query.
Это то, что у меня есть сейчас:
SELECT * FROM PEOPLE WHERE RELATION = 'child'
and (
'John' IN (SELECT FIRSTNAME FROM PEOPLE WHERE AGE = 20 AND RELATION = 'parent' ) OR
'John' IN (SELECT ALIAS FROM PEOPLE WHERE AGE = 20 AND RELATION = 'parent')
) ;
Я выяснил, что OR дает очень плохую производительность.
То, что я хочу достичь, это что-то вроде:
SELECT * FROM PEOPLE WHERE RELATION = 'child' AND 'John' IN
(SELECT FIRSTNAME, ALIAS FROM PEOPLE WHERE AGE = 20 AND RELATION = 'parent');
Первое имя и псевдоним в этом примере не обязательно одно и то же значение, поэтому я не могу использовать:
SELECT * FROM PEOPLE WHERE RELATION = 'child' AND ('John','John') IN
(SELECT FIRSTNAME, ALIAS FROM PEOPLE WHERE AGE = 20 AND RELATION = 'parent');
Так как это только найдет, в котором FIRSTNAME = ALIAS = 'John'.
Есть ли лучший способ сделать это, чем то, как это делается сейчас?
Может быть что-то вроде этого?