思路
SELECT
A.*,
B1.字段1,
B2.字段2
FROM
A
LEFT JOIN B AS B1 ON B1.ID = A.ID
LEFT JOIN B AS B2 ON B2.ID = A.FID
案例:
表IDO_GRADE_DETAIL:积分IDO加减分细节,每一件加减分的事件和分数
字段
FD_LOGIN_NAME 工号
FD_NAME 姓名
FD_EVENT 事件
FD_INTEGER 加多少分
DOC_CATEGORY_ID 所属类别
DOC_CREATE_TIME 创建时间
--本周积分增加或减少了多少
SELECT
D.FD_NAME,A.FD_LOGIN_NAME,A.IdoTotalVariation,B.IdoIncrement,C.IdoDecrement
FROM(
--IDO积分总变化量
SELECT FD_LOGIN_NAME,SUM(TO_NUMBER(fd_integer)) IdoTotalVariation
FROM ido_grade_detail
WHERE CAST(DOC_CREATE_TIME AS DATE) >= TRUNC(sysdate-7,'iw')
AND CAST(DOC_CREATE_TIME AS DATE) < TRUNC(sysdate,'iw')
GROUP BY FD_LOGIN_NAME
)A
LEFT JOIN(
--IDO积分增长量
SELECT FD_LOGIN_NAME,SUM(TO_NUMBER(fd_integer)) IdoIncrement
FROM ido_grade_detail
WHERE TO_NUMBER(fd_integer) >0
AND CAST(DOC_CREATE_TIME AS DATE) >= TRUNC(sysdate-7,'iw')
AND CAST(DOC_CREATE_TIME AS DATE) < TRUNC(sysdate,'iw')
GROUP BY FD_LOGIN_NAME
)B ON B.FD_LOGIN_NAME = A.FD_LOGIN_NAME
LEFT JOIN (
--IDO积分减少量
SELECT FD_LOGIN_NAME,SUM(TO_NUMBER(fd_integer)) IdoDecrement
FROM ido_grade_detail
WHERE TO_NUMBER(fd_integer) <0
AND CAST(DOC_CREATE_TIME AS DATE) >= TRUNC(sysdate-7,'iw')
AND CAST(DOC_CREATE_TIME AS DATE) < TRUNC(sysdate,'iw')
GROUP BY FD_LOGIN_NAME
)C ON C.FD_LOGIN_NAME = A.FD_LOGIN_NAME
LEFT JOIN SYS_ORG_ELEMENT D ON D.FD_NO = A.FD_LOGIN_NAME
WHERE A.FD_LOGIN_NAME = 'AY057490'
查询结果
不同表的字段放在同一行,也可用于求合集
SELECT
A.*,
B.*
FROM A,B
WHERE A.ID = B.ID