我尝试使用java做的是:
现在我拥有了我需要的一切,但是经过深思熟虑的SQL语句只允许我只通过数据库一次,如果这不起作用我怀疑我需要使用两个单独的SQL语句并通过数据库第二次。我对case语句没有清楚的理解,所以我只使用if语句提供伪代码。
SELECT A.1, A.2, A.3
if(A.3 > 0){
SELECT A.1, A.2, A.3, B.1, B.3
FROM A
JOIN B
ON A.1 = B.1
}
FROM A
任何人都可以了解我的情况吗?
编辑:谢谢您的时间和精力。我理解你的两个评论,我相信我更倾向于正确的方向,但我仍然遇到一些麻烦。我以前不知道SQLfiddle所以我现在已经开始做一个示例数据库,并试图证明我的目的。这是链接:http://sqlfiddle.com/#!3/ea108/1我想在这里做的是选择target_stats.server_id,target_stats.target,target_stats.threat_level其中interval_id = 3,如果threat_level> 0,我想检索attack_stats.attacker,attack_stats.sig_name其中interval_id = 3。再次,谢谢你的时间和精力对我来说非常有用 编辑:经过一些修修补补后,我想通了。非常感谢你的帮助答案 0 :(得分:1)
正如@ Ocelot20所说,SQL是不是程序代码。它基于基于集合的操作,而不是基于每行操作。这样做的一个直接后果是伪示例中的SELECT
是错误的,因为它依赖于具有不同列列表的相同结果集中的行。
也就是说,如果您可以容忍无法连接的NULL
值,那么您可以非常接近您的伪代码示例。
这是一个例子(对我而言)似乎接近你所驾驶的:
select *
from A
left outer join B
on A.a = B.d and A.a > 2
您可以在this SQLFiddle中看到它的实际效果,它应该显示您期望的输出类型。
请注意,这实际上是这样说的:
从表
A
中获取所有记录,并从中获取任何记录 表格B
的{{1}}列与表格中的d
列相同a
,前提是A
的值大于2。
(这是为了方便而选择的。在我相当设计的例子中,移动条件列不会影响输出,因为可以看到here)。