日期:2014-05-18  浏览次数:20761 次

两个字段组合成唯一记录的情况下怎样查询?
区别数据库中的记录并非id号之类的某一个字段,也就是说没有任何一个字段是唯一不重复的唯一值,必须用两个字段的组合才能成为区分每一条记录的唯一值,例如下表中 “箱号+客户编号”的组合才能成为唯一不重复的,意思是同一个箱子中有多个不同的客户,光看箱号很多记录是重复的,光看客户编号也是很多重复的记录,没有任何一个字段是像id号那样不重复的。

表A
箱号 客户编号 长度 宽度 高度
55 jacky 2 3 5
55 chen 2 4 6
78 chen 2 3 4

而下表中的数据就是根据上表中的数据计算出来的,如下

表B
箱号 客户编号 体积 
55 jacky 30
55 chen 48

也就是说,表B中的第一条记录是从表A那里获取数据来生成的,同理第二条数据就是根据表A的第二条数据计算出来的。现在很明显了,表A中的第三条数据是没有被表B中的数据使用过的,怎样吧表A中的第三条数据查询出来? 现在两张表中都没有任何一个字段是唯一的值,必须是“箱号+客户编号”的组合才能区分每一条记录,这样的情况下查出表A中的第三条数据的sql语句应该怎样写啊? 不知道我说的是否清楚,很难表达啊。

------解决方案--------------------
SQL code
select * from b where not exists(select 1 from a where 箱号=b.箱号 and 客户编号=a.客户编号)

------解决方案--------------------
SQL code
select * from 表A where not exists(select 1 from 表B where 箱号=表A.箱号 and 客户编号=表A.客户编号)

------解决方案--------------------
SQL code
select * from 表A 
where not exists(select 1 from 表B 
       where 箱号=表A.箱号 and 客户编号=表A.客户编号 and 体积<>a.长度*a.宽度*a.高度)