Oracle (+) 符号的 MySQL 变体用于外连接?

发布于 2025-01-02 13:11:53 字数 1657 浏览 1 评论 0原文

有人可以帮我为 MySQL 数据库重写这个 SQL(有子查询和外连接)

**select REPORT_PACKAGE.SUBJECT_LINE, ACTIVATION_DT, PARAM_VALUE, REPORT_URL, hasCustomerDetails,
isAccountsRolledUp FROM REPORT_PACKAGE, REPORT_PARAMETER, REPORT_DEFINITION, REPORT_PACKAGE_CONTENT,
(select param_value as hasCustomerDetails, rpt_package_id from report_parameter
where param_name = 'hasCustomerDetails') a,
(select param_value isAccountsRolledUp, rpt_package_id rid from report_parameter
where param_name = 'isAccountsRolledUp') as b
WHERE REPORT_PACKAGE.RPT_PACKAGE_ID = REPORT_PARAMETER.RPT_PACKAGE_ID
and param_name = 'rulePlanId' and
REPORT_PACKAGE_CONTENT.RPT_PACKAGE_ID = REPORT_PACKAGE.RPT_PACKAGE_ID and
REPORT_PACKAGE_CONTENT.RPT_DEF_ID = REPORT_DEFINITION.RPT_DEF_ID AND
REPORT_URL like '%AcctNbr%' and REPORT_PACKAGE.RPT_PACKAGE_ID = a.RPT_PACKAGE_ID(+)
and REPORT_PACKAGE.RPT_PACKAGE_ID = b.RPT_PACKAGE_ID(+);**

我尝试了以下方法,但没有成功:

**select repa.SUBJECT_LINE, ACTIVATION_DT, PARAM_VALUE, REPORT_URL, hasCustomerDetails,
isAccountsRolledUp FROM REPORT_PACKAGE repa
left join (select param_value as hasCustomerDetails, rpt_package_id from report_parameter
where param_name = 'hasCustomerDetails') as a
left join (select param_value as isAccountsRolledUp, rpt_package_id from report_parameter
where param_name = 'isAccountsRolledUp') as b
left join a on repa.RPT_PACKAGE_ID = a.RPT_PACKAGE_ID
left join b on repa.RPT_PACKAGE_ID = b.RPT_PACKAGE_ID
inner join REPORT_PACKAGE_CONTENT repc on repa.RPT_PACKAGE_ID = repc.RPT_PACKAGE_ID
inner join REPORT_DEFINITION rd on repc.RPT_DEF_ID = rd.RPT_DEF_ID
where REPORT_URL like '%AcctNbr%'**

can someone help me re-write this SQL for MySQL database (has both subquery and outer join)

**select REPORT_PACKAGE.SUBJECT_LINE, ACTIVATION_DT, PARAM_VALUE, REPORT_URL, hasCustomerDetails,
isAccountsRolledUp FROM REPORT_PACKAGE, REPORT_PARAMETER, REPORT_DEFINITION, REPORT_PACKAGE_CONTENT,
(select param_value as hasCustomerDetails, rpt_package_id from report_parameter
where param_name = 'hasCustomerDetails') a,
(select param_value isAccountsRolledUp, rpt_package_id rid from report_parameter
where param_name = 'isAccountsRolledUp') as b
WHERE REPORT_PACKAGE.RPT_PACKAGE_ID = REPORT_PARAMETER.RPT_PACKAGE_ID
and param_name = 'rulePlanId' and
REPORT_PACKAGE_CONTENT.RPT_PACKAGE_ID = REPORT_PACKAGE.RPT_PACKAGE_ID and
REPORT_PACKAGE_CONTENT.RPT_DEF_ID = REPORT_DEFINITION.RPT_DEF_ID AND
REPORT_URL like '%AcctNbr%' and REPORT_PACKAGE.RPT_PACKAGE_ID = a.RPT_PACKAGE_ID(+)
and REPORT_PACKAGE.RPT_PACKAGE_ID = b.RPT_PACKAGE_ID(+);**

I tried the following and it didnt work :

**select repa.SUBJECT_LINE, ACTIVATION_DT, PARAM_VALUE, REPORT_URL, hasCustomerDetails,
isAccountsRolledUp FROM REPORT_PACKAGE repa
left join (select param_value as hasCustomerDetails, rpt_package_id from report_parameter
where param_name = 'hasCustomerDetails') as a
left join (select param_value as isAccountsRolledUp, rpt_package_id from report_parameter
where param_name = 'isAccountsRolledUp') as b
left join a on repa.RPT_PACKAGE_ID = a.RPT_PACKAGE_ID
left join b on repa.RPT_PACKAGE_ID = b.RPT_PACKAGE_ID
inner join REPORT_PACKAGE_CONTENT repc on repa.RPT_PACKAGE_ID = repc.RPT_PACKAGE_ID
inner join REPORT_DEFINITION rd on repc.RPT_DEF_ID = rd.RPT_DEF_ID
where REPORT_URL like '%AcctNbr%'**

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

吻风 2025-01-09 13:11:53

我尝试重写查询,这就是我所拥有的 -

SELECT
  REPORT_PACKAGE.SUBJECT_LINE,
  ACTIVATION_DT,
  PARAM_VALUE,
  REPORT_URL,
  hasCustomerDetails,
  isAccountsRolledUp
FROM REPORT_PACKAGE
  JOIN REPORT_PARAMETER
    ON REPORT_PARAMETER.RPT_PACKAGE_ID = REPORT_PACKAGE.RPT_PACKAGE_ID
  JOIN REPORT_PACKAGE_CONTENT
    ON REPORT_PACKAGE_CONTENT.RPT_PACKAGE_ID = REPORT_PACKAGE.RPT_PACKAGE_ID
  JOIN REPORT_DEFINITION
    ON REPORT_DEFINITION.RPT_DEF_ID = REPORT_PACKAGE_CONTENT.RPT_DEF_ID
  LEFT JOIN (SELECT param_value hasCustomerDetails, rpt_package_id FROM report_parameter WHERE param_name = 'hasCustomerDetails') a
    ON a.RPT_PACKAGE_ID = REPORT_PACKAGE.RPT_PACKAGE_ID
  LEFT JOIN (SELECT param_value isAccountsRolledUp, rpt_package_id rid FROM report_parameter WHERE param_name = 'isAccountsRolledUp') b
    ON b.RPT_PACKAGE_ID = REPORT_PACKAGE.RPT_PACKAGE_ID
WHERE
  param_name = 'rulePlanId'
  AND REPORT_URL like '%AcctNbr%'

添加表别名以使该查询更具可读性。

I have tried to rewrite the query, and this is what I have -

SELECT
  REPORT_PACKAGE.SUBJECT_LINE,
  ACTIVATION_DT,
  PARAM_VALUE,
  REPORT_URL,
  hasCustomerDetails,
  isAccountsRolledUp
FROM REPORT_PACKAGE
  JOIN REPORT_PARAMETER
    ON REPORT_PARAMETER.RPT_PACKAGE_ID = REPORT_PACKAGE.RPT_PACKAGE_ID
  JOIN REPORT_PACKAGE_CONTENT
    ON REPORT_PACKAGE_CONTENT.RPT_PACKAGE_ID = REPORT_PACKAGE.RPT_PACKAGE_ID
  JOIN REPORT_DEFINITION
    ON REPORT_DEFINITION.RPT_DEF_ID = REPORT_PACKAGE_CONTENT.RPT_DEF_ID
  LEFT JOIN (SELECT param_value hasCustomerDetails, rpt_package_id FROM report_parameter WHERE param_name = 'hasCustomerDetails') a
    ON a.RPT_PACKAGE_ID = REPORT_PACKAGE.RPT_PACKAGE_ID
  LEFT JOIN (SELECT param_value isAccountsRolledUp, rpt_package_id rid FROM report_parameter WHERE param_name = 'isAccountsRolledUp') b
    ON b.RPT_PACKAGE_ID = REPORT_PACKAGE.RPT_PACKAGE_ID
WHERE
  param_name = 'rulePlanId'
  AND REPORT_URL like '%AcctNbr%'

Add table aliases to make this query more readable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文