如何交叉连接 sql 中的两个表
How to cross join two tables in sql
所以我需要交叉连接 2 个表,但我无法在不收到错误的情况下找到这样做的方法
ORA-01427: single-row subquery returns more than one row ORA-06512: at "SYS.DBMS_SQL", line 1721
这是我正在使用的代码,但我不知道我的错误来自哪里,我是 sql 的新手,所以感谢您的帮助:
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_Date 的子查询,returns 多于一行:
因此解决方案可能因逻辑而异,但这是一种方法:
...
(
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;
(Select
Expire_Date
从
SAP_Data
其中 Personnel_Number = _ESA.Personnel_Number
AND 复制 1 = 'Valid'
AND Course_Num = Safety_Map.Course_Num)
返回多行。如果您只需要前 1 行,那么您可以使用 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;
或者您可以使用聚合(max() 或 min()):
(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
所以我需要交叉连接 2 个表,但我无法在不收到错误的情况下找到这样做的方法
ORA-01427: single-row subquery returns more than one row ORA-06512: at "SYS.DBMS_SQL", line 1721
这是我正在使用的代码,但我不知道我的错误来自哪里,我是 sql 的新手,所以感谢您的帮助:
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_Date 的子查询,returns 多于一行:
因此解决方案可能因逻辑而异,但这是一种方法:
...
(
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;
(Select Expire_Date 从 SAP_Data 其中 Personnel_Number = _ESA.Personnel_Number AND 复制 1 = 'Valid' AND Course_Num = Safety_Map.Course_Num)
返回多行。如果您只需要前 1 行,那么您可以使用 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;
或者您可以使用聚合(max() 或 min()):
(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