left join 能否只返回 右边集合的第一行?或有变通方法

时间:2021-10-18 15:04:33
left join 能否只返回 右边集合的第一行?

SELECT S.manufactureno ,SAMPLE_COLORS.COLOR_CODE ,SIZERATIO.SIZECODE ,'1','1000'
FROM SAMPLE S 
LEFT JOIN SIZEGROUP ON S.SIZEGROUPID = SIZEGROUP.SIZEGROUPID AND rownum=1
LEFT OUTER JOIN SAMPLE_COLORS ON S.SAMPLENO = SAMPLE_COLORS.SAMPLENO  AND rownum=1
LEFT JOIN SIZERATIO ON SIZERATIO.SIZEGROUPID=S.SIZEGROUPID AND SIZERATIO.SIZEID='01' AND rownum=1
WHERE  S.BUYMEETING LIKE '%2015%'

6 个解决方案

#1


只返回第一行是指什么呢。对应sample表每条记录的第一条,还是右边总共只返回一条

#2


最好是只返回SAMPLE_COLORS 和SIZERATIO 的符合条件的第一行 记录。

#3


这样的话还是写子查询来得好
SELECT S.manufactureno,
       (select SAMPLE_COLORS.COLOR_CODE
          from SAMPLE_COLORS
         where S.SAMPLENO = SAMPLE_COLORS.SAMPLENO
           and rownum = 1) COLOR_CODE,
       (select SIZERATIO.SIZECODE
          from SIZERATIO
         where SIZERATIO.SIZEGROUPID = S.SIZEGROUPID
           AND SIZERATIO.SIZEID = '01'
           AND rownum = 1) SIZECODE,
       '1',
       '1000'
  FROM SAMPLE S
 WHERE S.BUYMEETING LIKE '%2015%'

貌似SIZEGROUP 表没用。有用的话也一样加上去

#4


右边连接表子查询一次

#5


估计他的意思是,用多个左关联多个表后,查询出来的结果集中是否还可以保持最右边表集合的记录条数,
我的理解是,无论多少次,返回的结果集都是最右边的那个结果集的记录条数;
可以
SELECT count(1) FROM ('关联后的结果集'),一个一个的加上去看看,记录是否发生变化。

#6


引用 楼主 handsome1234 的回复:
left join 能否只返回 右边集合的第一行?

SELECT S.manufactureno ,SAMPLE_COLORS.COLOR_CODE ,SIZERATIO.SIZECODE ,'1','1000'
FROM SAMPLE S 
LEFT JOIN SIZEGROUP ON S.SIZEGROUPID = SIZEGROUP.SIZEGROUPID AND rownum=1
LEFT OUTER JOIN SAMPLE_COLORS ON S.SAMPLENO = SAMPLE_COLORS.SAMPLENO  AND rownum=1
LEFT JOIN SIZERATIO ON SIZERATIO.SIZEGROUPID=S.SIZEGROUPID AND SIZERATIO.SIZEID='01' AND rownum=1
WHERE  S.BUYMEETING LIKE '%2015%'
看看提问的智慧,给个示例,或者把测试数据拿来,原始+想要的。

#1


只返回第一行是指什么呢。对应sample表每条记录的第一条,还是右边总共只返回一条

#2


最好是只返回SAMPLE_COLORS 和SIZERATIO 的符合条件的第一行 记录。

#3


这样的话还是写子查询来得好
SELECT S.manufactureno,
       (select SAMPLE_COLORS.COLOR_CODE
          from SAMPLE_COLORS
         where S.SAMPLENO = SAMPLE_COLORS.SAMPLENO
           and rownum = 1) COLOR_CODE,
       (select SIZERATIO.SIZECODE
          from SIZERATIO
         where SIZERATIO.SIZEGROUPID = S.SIZEGROUPID
           AND SIZERATIO.SIZEID = '01'
           AND rownum = 1) SIZECODE,
       '1',
       '1000'
  FROM SAMPLE S
 WHERE S.BUYMEETING LIKE '%2015%'

貌似SIZEGROUP 表没用。有用的话也一样加上去

#4


右边连接表子查询一次

#5


估计他的意思是,用多个左关联多个表后,查询出来的结果集中是否还可以保持最右边表集合的记录条数,
我的理解是,无论多少次,返回的结果集都是最右边的那个结果集的记录条数;
可以
SELECT count(1) FROM ('关联后的结果集'),一个一个的加上去看看,记录是否发生变化。

#6


引用 楼主 handsome1234 的回复:
left join 能否只返回 右边集合的第一行?

SELECT S.manufactureno ,SAMPLE_COLORS.COLOR_CODE ,SIZERATIO.SIZECODE ,'1','1000'
FROM SAMPLE S 
LEFT JOIN SIZEGROUP ON S.SIZEGROUPID = SIZEGROUP.SIZEGROUPID AND rownum=1
LEFT OUTER JOIN SAMPLE_COLORS ON S.SAMPLENO = SAMPLE_COLORS.SAMPLENO  AND rownum=1
LEFT JOIN SIZERATIO ON SIZERATIO.SIZEGROUPID=S.SIZEGROUPID AND SIZERATIO.SIZEID='01' AND rownum=1
WHERE  S.BUYMEETING LIKE '%2015%'
看看提问的智慧,给个示例,或者把测试数据拿来,原始+想要的。