[讨论] 今天去面试了,有三个题目问倒我了,写出来大家做做!

tlde_ti 2012-07-23
huangshanghua 写道
用左连接,面试官说会产生笛卡尔积效果,我觉得也不会

笛卡尔积效果?不明所以.
【更正后】cross join和
select * from table1,table2.才会有笛卡尔积的效果吧

按提议这个也不该是左连接,而是full outer join.然后按照那位说的排除有某列id为null的行的确能取出没有重复的行,不过join 和 union 语义是不一样的,join会多出多余的列,消除又是一件麻烦事。

------------------------
看到楼下的了.两个left join来消除多余的列么。。我果然还是多sql不熟.
不过就我的低水平来看似乎不严谨吧,name可能本来就为空的,这里判断id为null更好.
xukehg 2012-07-23
第三题感觉写的语焉不详 未指出仅过滤ID不同 以及显示方式 故猜测如下

user1
id name age sex
1 张三 20 男
2 李四 21 男

user2
id name   age sex
1 张三   20 男
3 王二麻子  21 男


用access实现的

(SELECT a.name,a.age,a.sex from user1 a left outer join user2 b on a.id=b.id where b.name is null)
union
(SELECT a.name,a.age,a.sex from user2 a left outer join user1 b on a.id=b.id where b.name is null)

结果

name   age sex
李四   21 男
王二麻子  21 男
redK 2012-07-23
坏孩子 写道
charles751 写道
问题1:
1.jsp页面提供添加参数的界面。
可以包含要添加的字段值、映射名称、表名、字段类型、映射类型等配置信息

2.后台处理
2.1添加字段到数据库指定的表
2.2添加配置信息到hbm.xml中。

3.映射文件生效
可以重新load下hibernate的context


你敢在生产环境下reload吗?

第一题你把表设计成key value的方式就可以了,就是效率低一点,不知道对方是要考数据库还是hibernate

第二题最简单的就直接用反射了


charles751的方法还有一个问题就是,如何修改实体类并编译?

把表设置成key value的形式我觉得是比较好的替代方案,就是取数的时候sql稍微相对复杂一点而已。
Fkron 2012-07-23
第三题很简单:
--两表异同部分
select * from tb_t1 t1 where not exists (select ids from tb_t2 t2 where t1.ids = t2.ids);
tonly85 2012-07-23
使用Minus和Union关键字应该也可以实现的:
(
SELECT ID, NAME, SEX, AGE FROM TBL1
MINUS
SELECT ID, NAME, SEX, AGE FROM TBL2
)
UNION ALL
(
SELECT ID, NAME, SEX, AGE FROM TBL2
MINUS
SELECT ID, NAME, SEX, AGE FROM TBL1
)
wshcdr 2012-07-23
3、有两个表,表的属性都有:id,name,sex,age;第一个表有700条数据,第二个表有500条数据,其中两个表中有300条是id相同的,如何把两个表中不相同的数据取出来,面试官说只能用exist关键字才能做到?还有其它好办法吗?


SELECT *
FROM tbl1 A
FULL OUTER JOIN tbl2 B
ON A.Key = B.Key
WHERE A.Key IS NULL OR B.Key IS NULL
xiangyunwan 2012-07-23
[color=darkred][/color]
xiangyunwan 2012-07-23
[color=orange][/color]12312312
jubn 2012-07-23
tlde_ti 写道
jubn 写道
问题3: select * from (table1 union table2) group by id having(conut(id)=1)

这条语句违反了select 列只能是 group by的列或使用了aggregate函数的列的规则。
这样写修改正确后只能select id.最后要用这个取集合还是要 用 in和exist。所以我没写这个方法。

我认为两个表的id相同,那相应的人员信息应该都是一样的,如果这个前提成立的话就可以像这样实现。不好意思,上面的sql只是想说用group by having的语法可以实现;语句肯定是有问题的
raveh 2012-07-23
Oracle的话可以使用minus的。
-- 补充,回答第三题。
Global site tag (gtag.js) - Google Analytics