首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL两表查询写法改进解决思路

2012-04-27 
SQL两表查询写法改进现在又有t1,t2两张表t1 有a1,a2,a3(pk:a1,a2)t2 有b1,b2,b3(pk:b1,b2)现在要查询条件

SQL两表查询写法改进
现在又有t1,t2两张表
t1 有a1,a2,a3(pk:a1,a2)
t2 有b1,b2,b3(pk:b1,b2)
现在要查询条件是
a1=b1 and a2>=b2 and b2 是最大的数据
最后取得字段a1,a2,b2,b3,我有2个问题
问题1 这样的代码对吗?
SELECT a1,a2,b2,b3
FROM (SELECT a1,a2,MAX(b2) AS mb2
  FROMt1,t2
  WHERE a1 = b1 AND a2 >= b2 
  GROUP BY a1,a2 )A,
  t2 B
WHEREA.a1 = B.a1 
ANDA.mb2 = B.b2
如果对,但是我还是觉得太繁琐了
问题2 高效的写法吗?

[解决办法]
语句有点区别,原因是鸟书中的最大有歧义

你的语句等同于

SQL code
SELECT A.A1,A.A2,B.B2,B.B3FROM T1 A INNER JOIN T2 BON A.A1=B.B1AND A.A2 >= B.B2AND NOT EXISTS (  SELECT 1 FROM T2  WHERE B1 = B.B1  AND A.A2 >= B2  AND B2 > B.B2  )
[解决办法]
SQL code
CREATE TABLE t1(    a1 INT,    a2 INT,    a3 INT)CREATE TABLE t2(    b1 INT,    b2 INT,    b3 INT)INSERT INTO t1SELECT 1,3,1 UNIONSELECT 2,3,1 UNIONSELECT 3,1,1INSERT INTO t2SELECT 1,2,3 UNIONSELECT 1,1,4 UNIONSELECT 3,1,1SELECT *FROM t1,t2WHERE a1 = b1 AND a2 >= b2 AND b2 >= ALL(SELECT b2 FROM t2 WHERE a1 = b1 AND a2 >= b2) 

热点排行