Java Oracle SQL Developer-使用一对多关系连接2个查询
我想把两个问题结合起来 在Java Oracle SQL Developer-使用一对多关系连接2个查询,java,python,sql,oracle-sqldeveloper,jython,Java,Python,Sql,Oracle Sqldeveloper,Jython,我想把两个问题结合起来 在first\u queryTABLE2.PROCESS\u ID中,该表中的每个PROCESS\u ID都是唯一的。在second\u query中,虽然在表3中有几个进程ID的编号相同,但我认为我必须进行一对多连接。我的join\u查询给了我一个错误ORA-00933:SQL命令没有正确结束,我假设这与join的一对多关系有关 我真的不知道如何解决这个问题。任何帮助都将不胜感激 first_query = """ SELECT TABLE1.RULE_ID, TABL
first\u query
TABLE2.PROCESS\u ID中,该表中的每个PROCESS\u ID都是唯一的。在second\u query
中,虽然在表3中有几个进程ID的编号相同,但我认为我必须进行一对多连接。我的join\u查询
给了我一个错误ORA-00933:SQL命令没有正确结束
,我假设这与join的一对多关系有关
我真的不知道如何解决这个问题。任何帮助都将不胜感激
first_query = """
SELECT TABLE1.RULE_ID, TABLE2.STATUS, TABLE2.ERROR_MESSAGE, TABLE2.PROCESS_ID
FROM TABLE2 LEFT JOIN
TABLE1
ON TABLE1.RULE_ID = TABLE2.RULE_ID
WHERE TABLE1.RULE_NAME IN ('TEST1', 'TEST2')
"""
second_query = """
SELECT RECORDS_PROCESSED, PROCESS_ID, STATUS
FROM TABLE3
"""
join_query = """
SELECT RULE_ID, STATUS, ERROR_MESSAGE, PROCESS_ID
FROM (first_query) as query_1
INNER JOIN (second_query) as query_2
ON query_1.PROCESS_ID = query_2.PROCESS_ID
GROUP BY PROCESS_ID desc
"""
除非将所选列作为聚合功能的一部分(如max()、sum()、…),否则不能选择4列并仅按其中一列进行分组。其中一个选择是:
SELECT query_1.RULE_ID --1
, query_2.STATUS --2
, query_1.ERROR_MESSAGE --3
, query_1.PROCESS_ID --4
FROM (SELECT TABLE1.RULE_ID
, TABLE2.STATUS
, TABLE2.ERROR_MESSAGE
, TABLE2.PROCESS_ID
FROM TABLE2
LEFT JOIN TABLE1
ON TABLE1.RULE_ID = TABLE2.RULE_ID
WHERE TABLE1.RULE_NAME IN ('TEST1', 'TEST2')) query_1
INNER JOIN (SELECT RECORDS_PROCESSED
, PROCESS_ID
, STATUS
FROM TABLE3) query_2
ON query_1.PROCESS_ID = query_2.PROCESS_ID
GROUP BY query_1.RULE_ID
, query_2.STATUS
, query_1.ERROR_MESSAGE
, query_1.PROCESS_ID
也请考虑使用像这样的别名(在您的第一个查询中):
另外,在最终查询中使用别名应用相同的逻辑,否则将出现不同类型的错误:“ORA-00918:定义不明确的列””CTE
(即带有保理条款的)可能会有所帮助
WITH first_query
AS (SELECT table1.rule_id,
table2.status,
table2.error_message,
table2.process_id
FROM table2 LEFT JOIN table1 ON table1.rule_id = table2.rule_id
WHERE table1.rule_name IN ('TEST1', 'TEST2')),
second_query
AS (SELECT records_processed, process_id, status FROM table3)
SELECT a.rule_id,
a.status,
a.error_message,
a.process_id
FROM first_query a INNER JOIN second_query b ON a.process_id = b.process_id
您使用的分组依据
无效;不能仅按一列对结果进行分组。如果结果必须是唯一的,请使用选择distinct
。如果必须使用分组依据
,请指定选择
返回的所有列(这将引导您返回到distinct
所做的操作),或者查看某些列是否必须是聚合的-在这种情况下,分组依据
是有意义的
此外,您应该始终使用表别名。如果没有这些列,查询将无效,因为数据库引擎不知道这些列(如果它们共享相同的名称)属于哪个表
WITH first_query
AS (SELECT table1.rule_id,
table2.status,
table2.error_message,
table2.process_id
FROM table2 LEFT JOIN table1 ON table1.rule_id = table2.rule_id
WHERE table1.rule_name IN ('TEST1', 'TEST2')),
second_query
AS (SELECT records_processed, process_id, status FROM table3)
SELECT a.rule_id,
a.status,
a.error_message,
a.process_id
FROM first_query a INNER JOIN second_query b ON a.process_id = b.process_id