我怎么知道where子句的查询结果包含另一个where子句的查询结果? 例如:
"id>0" contains "id>1"
"id>0 or name='China'" contains "id>1"
"id>0 or name='China'" contains "name='China'"
抱歉,我的英语水平很差。
有一张表:国家(身份证,姓名)。
id name
0 America
1 China
2 Japan
3 England
显然,select id, name from Countries where id>0
的查询结果包含select id, name from Countries id>2
。
我想通过直接比较两个where子句得到结果,我不想执行实际的查询操作
我使用java。
答案 0 :(得分:0)
这取决于您的数据,因此您必须通过加入其结果来运行每个where子句。您可以加入它们并检查是否存在任何结果。
答案 1 :(得分:0)
您可以使用set运算符来比较两者。如果query2没有任何不在query1中的行,则query1包含query2。
例如,对于Oracle:
SELECT *
FROM my_table
WHERE condtion2
MINUS
SELECT *
FROM my_table
WHERE condtion1
对于MS SQL Server和PostgreSQL,请使用EXCEPT
代替MINUS
。
答案 2 :(得分:0)
嗯,首先,您需要一种方法来表示您的条件其他而不仅仅是文本。如果没有充实所有课程,下面应该得到它的要点。
public abstract class Condition implements Comparable<C extends Condition> {
public abstract boolean equals(C other);
public abstract boolean contains(C other);
};
public class OrCondition extends Condition {
// contains a list of the conditions it's OR-ring together
public boolean contains(Condition other) {
// true if the list of conditions
// contains a condition c such that c.equals(other)
}
}
public class GreaterThanCondition extends Condition {
// contains a fieldname and a number to compare it to
public boolean contains(Condition other) {
// true if other is a GreaterThanCondition as well
// on the same field and the number other.number >= this.number
}
}
等等。比较字符串和提出其他条件留给OP(或读者,如果读者倾向于这样做)的练习。
当然,这很有用。只要您想回答依赖于数据的问题,您就别无选择,只能执行某些查询。例如,有更简单的方法可以找出WHERE id > 1
包含WHERE name > 'China'
而不是发出查询。