如何在sql中交叉连接两个表
因此,我需要交叉连接两个表,但我无法找到一种不接收错误的方法 ORA-01427:单行子查询返回多行ORA-06512:at SYS.DBMS_SQL,第1721行 以下是我正在使用的代码,但我不知道错误来自何处,我是sql新手,因此非常感谢您的帮助:如何在sql中交叉连接两个表,sql,oracle,oracle-apex,Sql,Oracle,Oracle Apex,因此,我需要交叉连接两个表,但我无法找到一种不接收错误的方法 ORA-01427:单行子查询返回多行ORA-06512:at SYS.DBMS_SQL,第1721行 以下是我正在使用的代码,但我不知道错误来自何处,我是sql新手,因此非常感谢您的帮助: INSERT INTO Valid_Safety (Area, Course_ID, Course_Name, Personnel_Number, ESA_Name, Section_Leader, Valid, Expire_Date) Se
INSERT INTO Valid_Safety (Area, Course_ID, Course_Name, Personnel_Number, ESA_Name, Section_Leader, Valid, Expire_Date)
Select Safety_Map.Area,
Course_ID,
Course_Name,
_ESA.Personnel_Number,
_ESA.ESA_Name,
_ESA.Section_Leader,
(Select
COUNT(*) Valid
From
SAP_Data
Where Personnel_Number = TX3_ESA.Personnel_Number
AND Duplicate1 = 'Valid'
AND Course_Num = Safety_Map.Course_Num) As Valid,
(Select
Expire_Date
From
SAP_Data
Where Personnel_Number = _ESA.Personnel_Number
AND Duplicate1 = 'Valid'
AND Course_Num = Safety_Map.Course_Num) As Expire_Date
From Safety_Map CROSS JOIN _ESA;
看起来像是Expire\u Date的子查询,返回多行: 因此,根据逻辑,解决方案可能会有所不同,但这里有一种方法:
...
(
Select max(Expire_Date)
From SAP_Data
Where Personnel_Number = _ESA.Personnel_Number
AND Duplicate1 = 'Valid'
AND Course_Num = Safety_Map.Course_Num
) As Expire_Date
From Safety_Map CROSS JOIN _ESA;
挑选
到期日
从…起
SAP_数据
其中人员编号=\ ESA.人员编号
和Duplicate1='Valid'
课程号=安全地图。课程号
正在返回多行。如果您只需要最上面的一行,那么您可以使用rownum或仅获取前10行
Select Safety_Map.Area,
Course_ID,
Course_Name,
_ESA.Personnel_Number,
_ESA.ESA_Name,
_ESA.Section_Leader,
(Select
COUNT(*) Valid
From
SAP_Data
Where Personnel_Number = TX3_ESA.Personnel_Number
AND Duplicate1 = 'Valid'
AND Course_Num = Safety_Map.Course_Num) As Valid,
(Select
Expire_Date
From
SAP_Data
Where Personnel_Number = _ESA.Personnel_Number
AND Duplicate1 = 'Valid'
AND Course_Num = Safety_Map.Course_Num
and rownum=1 ) As Expire_Date
From Safety_Map CROSS JOIN _ESA;
也可以使用聚合最大值或最小值:
(Select
max(Expire_Date)
From
SAP_Data
Where Personnel_Number = _ESA.Personnel_Number
AND Duplicate1 = 'Valid'
AND Course_Num = Safety_Map.Course_Num
and rownum=1 ) As Expire_Date
第二个子查询可能返回多行。您确定where子句中给定的条件只有一个过期日期吗?非常感谢您的帮助!就像我说的,我是sql新手,甚至不知道max是个东西,我不是一个数据库编码员,非常欢迎你。您在sql方面做得很好。最美好的祝福。