当我满足(一个或多个)条件时,我试图从表中获取一些信息,但这些条件存储在其他表中。
以下是3个表的截图:
所以我需要一个查询来执行此操作:
IDStatus
)和动作(IDAction
)如果有IDCondition
(可以NULL
,一个或多个)
一个。如果有,请使用IDocField
作为IDoc
表中的列,使用ConditionOperator
作为条件(将其视为=
,<
, >
)和ConditionValue
上的值。
B中。如果有多个,与之前相同,但使用AND
的每个条件。
℃。如果是NULL
,请直接转到第3点
获取与上述所有内容相匹配的Subject
,SendTo
,CC
,CCO
和FileTemplate
。
我想尝试这个,因为它会减少我的C#代码,但如果这太复杂或不合理,我会做多个查询,就像我上面解释的那样。
我问这个,因为我不确定如何在SELECT
中获得多个条件。我的意思是:
如果有多个条件,我怎样才能执行它们或者在一个查询中获取所有这些条件但是在第3点有所有返回的东西?
示例:
SELECT *
FROM WF_MailCondition
WHERE IDCondition = 1
这将返回IDCondition
等于1的所有条件(键可以重复)但是我必须使用所有三列创建类似ID = 1
ID
的条件IDocField
中的=
,ConditionOperator
中的1
和ConditionValue
中的IDCondition
。
我知道图像中存在一些不一致之处,例如NN
是SELECT
Subject, SendTo, CC, CCO, FileTemplate
FROM
WF_Mail AS M
INNER JOIN
WF_MailStatusAction AS S ON S.IDMail = M.IDMail
WHERE
(SELECT "HERE SELECT THE 3 COLUMNS TO USE A CONDITION" FROM WF_MailCondition WHERE IDCondition = S.IDCondition)
AND (S.IDAction = "ACTION FROM OUTSIDE" AND S.IDStatus = "STATUS FROM OUTSIDE")
(非空)但我说它可以为空(我正在修理这些东西)。
我的SQL:
SELECT "HERE SELECT 3 COLUMNS..."
如何IDCondition
以及NULL
Subject
是否直接获取第一个SELECT中请求的列(SendTo
,"ACTION FROM OUTSIDE"
等。 )
import java.util.HashMap;
import java.util.Map;
public class HelloWorld {
public static void main(String []args){
Map<String, Integer> myMap = new HashMap<String, Integer>();
String[] products = {"Apple", "Pear", "Banana", "Apple"};
String[] amounts = {"2", "3", "3", "2"};
for (int i = 0; i < products.length; i++) {
String product = products[i];
int amount = Integer.valueOf(amounts[i]);
if (myMap.containsKey(product)) {
myMap.put(product, myMap.get(product) + amount);
} else {
myMap.put(product, amount);
}
}
for (String product : myMap.keySet()) {
System.out.println(product + ": " + myMap.get(product));
}
}
}
是一个参数化语句。
忘记外键,我们没有使用它(老板的决定......)。
我这样做是因为是“事件”的事情。我在我的C#代码中调用一个方法来查看是否有要发送的邮件。但是这封邮件可以没有,一个或多个条件。这是有比所有必须发送邮件更多的选项。也许在工作流程中没有必要发送电子邮件,但在代码中是“硬编码”所以我可以完全自由地做我需要的关于该功能。
也许所有这些都可以是一个函数或一个存储过程,但我对它和它们的性能一无所知。
如果您需要更多信息,请告诉我。
答案 0 :(得分:0)
我建议如下:
- 创建QueryBuilder
班级
你有哪些方法:
* AddSelect()
* AddFrom()
* AddWhere()
* ToString()
...
然后使用“中间层”根据条件处理查询操作 这样你就可以最大程度地控制正在进行的一切
答案 1 :(得分:0)
根据我的理解,我会写一个这样的查询:
select m.subject, m.cc
from wf_mail m
where exists (select 'true'
from wf_mailstatusaction s, wf_mailcondition c
where s.idmail=m.idmail
and s.idcondition = c.idcondition
and c.idocfield||c.conditionoperator||c.conditionValue = 'id>500'
group by s.idcondition
having count(s.idcondition) = 1)
or exists (select 'true'
from wf_mailstatusaction s, wf_mailcondition c
where s.idmail=m.idmail
and s.idcondition = c.idcondition
and c.idocfield||c.conditionoperator||c.conditionValue IN ('id>500', 'id<200')
group by s.idcondition
having count(s.idcondition) > 1)
or exists (select 'true'
from wf_mailstatusaction s
where s.idmail=m.idmail
and s.idcondition is null)