我有表A,表B,两张表都有column1字段(这个字段是两个表的关联字段),我需要的sql语句是:表A的column1字段不为空时,增加条件A.column1=B.column1;为空时,不加条件。这样的sql怎么写?
解决方案 »
- SSI中报错 com.ibatis.sqlmap.client.SqlMapException: There is no statement named XXX
- struts中执行数据库操作大家是怎么做的?是直接把SQL语句放在action中?还是另外再做个类或者做个层?
- tomcat+ssl双向认证,为什么applet出现问题?
- 50分~客户能否自己设置http标题域,然后再把包含这个标题域的请求发送给服务器?
- 关于服务器端上传后的文件改名字的问题
- 急急!用jspsmartUpload上传文件到另一台服务器的问题??在线等!!
- 请问能不能有人帮我看一下这段程序?
- 救急!!!!!!!!!
- java中如何实现多继承?
- 从sun网站上下载的servlet2.3classfile应该放在什么地方?
- dom4j生成xml时添加standalone属性
- 怎样用正则表达式验证文本框输入的值
and A.column1 =(CASE A.column1 WHEN null THEN null ELSE B.column1 end)但是对null的判断是is null,求解
你是说用sql判断,还是java语句判断
from A
left join B on A.column1=B.column1
如果column1 为null,则用A.column2=B.column2
假如有两个数据表A(或连接)和B(或连接),并且需要某个共同存在的数据项c相等,而且在A中出现的记录全 部被筛选出,B中没有的记录则用空格填写,这种运算记为A.c*=B.c,称为左外联结。这两个的效果是一样的:
select * from a, b where
a.column1=(CASE a.column1 WHEN null THEN null ELSE b.column1 end)
select * from a left join b on b.column1=b.column1
and A.column1 =(CASE A.column1 WHEN null THEN A.column1 ELSE B.column1 end)是null的时候等于自己
oracle 值为null的时候,自己也不等于自己。
表A:create table A (id int,c1 nvarchar(10),c2 varchar(10),flag char(1));表B:create table B (id int,c1 nvarchar(10),c2 varchar(10),des varchar(20));insert into A values (1, '张', '201', '0');insert into A values (1, '王', '202', '0');insert into A values (1, '李', '203', '0');insert into B (id, c1, c2, des) values (1, '张', '201', '测试1');insert into B (id, c1, c2, des) values (1, '王', '202', '测试2');insert into B (id, c1, c2, des) values (1, '李', '203', '测试3');关联关系:A表的c1、c2字段和B表的c1,、c2字段分别为外键关联。A表的c1、c2字段有且可能只有一个为null,当c1为null时,A表使用c2去关联B表c2,当c2为null时,A表使用c1关联B表的c1,都不为空时,两个条件都要关联。实现SQL:select *
from A a
left join B b
on nvl(a.c1,N'null') = (CASE nvl(a.c1,N'null')
WHEN N'null' THEN
N'null'
ELSE
b.c1
end)
and nvl(a.c2,'null') = (CASE nvl(a.c2,'null')
WHEN 'null' THEN
'null'
ELSE
b.c2
end);注意点:1、当字段值为null时,自己和自己比较结果为不相等。这时,可将空值通过nvl函数转换为其它值(本例中'null'),再做比较。 2、当字段是nvarchar类型时,需要在字符前面加大写的N。N 在这里表示 Unicode,就是双字节字符。对于西文字符,用一个字节来存储过足够了,对于东方文字字符,就需要两个字节来存储。Unicode 为了统一、规范、方便、兼容,就规定西文字符也用两个字节来存储。也就是说加 N 就表示字符串用 Unicode 方式存储.对于nvarchar是否需要+N,会自动转换的情况不需要,但是如上例case语句中,不能自动转换,则需要手动+N