如何从表中获取只有在连接两个表之后没有值的结果

时间:2012-06-18 13:10:56

标签: mysql jsp

Statement st=conn.createStatement();
String sql="SELECT a.ID,a.A_TEXT,a.B_TEXT,a.C,a.D_TO_E,a.F_TEXT,a.G,a.INTIME,b.EXIT_TIME FROM tm_A a LEFT JOIN tm_B b ON a.ID=b.ID WHERE EXIT_TIME=''";

ResultSet rs=st.executeQuery(sql);

while(rs.next())
    {

    arls.add(rs.getString("ID"));
    arls.add(rs.getString("A_TEXT"));
    arls.add(rs.getString("B_TEXT"));
    arls.add(rs.getString("C"));
    arls.add(rs.getString("D_TO_E"));
    arls.add(rs.getString("F_TEXT"));
    arls.add(rs.getString("G"));
    arls.add(rs.getString("INTIME"));
    arls.add(rs.getString("EXIT_TIME"));

    }

我有上面的代码,我想从两个表中检索值,其中EXIT_TIME ='null' 虽然表tm_A中有值,但执行后我什么都没得到 但是,如果我删除where子句然后我得到结果,但在EXIT_TIME下它显示'null'并且有值显示

2 个答案:

答案 0 :(得分:2)

如果要选择列为null的结果,则必须使用is运算符:

SELECT a.ID,a.A_TEXT,a.B_TEXT,a.C,a.D_TO_E,a.F_TEXT,a.G,a.INTIME,b.EXIT_TIME 
FROM tm_A a 
LEFT JOIN tm_B b ON a.ID=b.ID 
WHERE EXIT_TIME is null

null的比较将始终显示为unknown。这就是您需要is运算符而不是=

的原因

使用EXIT_TIME=''会将EXIT_TIME与空字符串进行比较,而不是null

如果您希望null中所有 EXIT_TIME的记录都可以使用

WHERE EXIT_TIME is not null

修改

您可以使用case来避免文本框中的null

    SELECT a.ID, 
       a.A_TEXT,
       a.B_TEXT,
       a.C,
       a.D_TO_E,
       a.F_TEXT,
       a.G,
       a.INTIME,
       case when b.EXIT_TIME is null
            then 'NA'
            else b.EXIT_TIME
       end as EXIT_TIME
FROM tm_A a 
LEFT JOIN tm_B b ON a.ID=b.ID 

答案 1 :(得分:0)

说完

WHERE EXIT_TIME is null

而不是

WHERE EXIT_TIME=''

希望它对你有所帮助......