下面的代码只是一个简化的描述,由于数据集的原因,查询的结构必须是这样的。
我想查找子查询的两列中可能存在值的条目。
这就是我现在拥有的:
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' 的整体。
有比现在更好的方法吗?
最佳答案
可能是这样的吗?
SELECT *
FROM people
WHERE relation = 'child'
AND EXISTS (SELECT 1
FROM people
WHERE age = 20
AND relation = 'parent'
AND ( firstname = 'john'
OR alias = 'john' )) ;
关于sql - 一个或另一列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49957521/