[讨论] 今天去面试了,有三个题目问倒我了,写出来大家做做!
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的。
-- 补充,回答第三题。 |