【问题标题】:Show results of select * from left join of two tables without using * (Oracle)显示 select * from left join of two tables without using * (Oracle) 的结果
【发布时间】:2023-01-27 17:41:46
【问题描述】:

我需要创建一个函数来显示此连接的所有列,但根据参数,一个额外的列会添加到查询中。向您展示它是如何工作的

这是原始查询



SELECT * FROM bf_uom.V_BF_JOBS_STATUS Bj
left join bf_uom.bf_runs r
on bj.run_id = r.run_id
LEFT JOIN bf_uom.Bf_Document_Catalog Bdc
ON
  bf_uom.Bj.Document_Label = Bdc.Document_Label
left join bf_uom.bf_load_jobs lj
on lj.job_id=bj.job_id WHERE lj.job_id =:JOB_ID

但是,如果满足输入参数,则应向查询添加一个额外的列,如下所示

SELECT 'DOWNLOAD PDF' as "DOWNLOAD",* FROM bf_uom.V_BF_JOBS_STATUS Bj
left join bf_uom.bf_runs r
on bj.run_id = r.run_id
LEFT JOIN bf_uom.Bf_Document_Catalog Bdc
ON
  bf_uom.Bj.Document_Label = Bdc.Document_Label
left join bf_uom.bf_load_jobs lj
on lj.job_id=bj.job_id WHERE lj.job_id =:JOB_ID

这当然行不通,我尝试添加表。* 而不是 *,但它仍然没有显示与 SELECT * 相同的列数。

如何在不键入应该在 SELECT 语句中的所有列的名称的情况下解决这个问题?

【问题讨论】:

  • 'DOWNLOAD PDF' as "DOWNLOAD", bj.*, r.* 添加列时,您必须使用引用表的别名。 (至少对于 ORACLE)
  • 单个 * 不能与 SELECT 子句中的任何其他内容组合。

标签: sql oracle join


【解决方案1】:

如何在不键入应该在 SELECT 语句中的所有列的名称的情况下解决这个问题?

然而,那是确切地你应该做什么。


无论如何,如果你坚持坏习惯,那么这是有效的:

SQL> select *
  2  from dept d left join emp e on e.deptno = d.deptno;

    DEPTNO DNAME          LOC                EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------- ------------- ---------- ---------- --------- ---------- -------- ---------- ---------- ----------
        10 ACCOUNTING     NEW YORK            7782 CLARK      MANAGER         7839 09.06.81       2450                    10
        10 ACCOUNTING     NEW YORK            7839 KING       PRESIDENT            17.11.81       5000                    10
        10 ACCOUNTING     NEW YORK            7934 MILLER     CLERK           7782 23.01.82       1300                    10
<snip>

15 rows selected.

这是行不通的:

SQL> select 'download pdf' as download, *
  2  from dept d left join emp e on e.deptno = d.deptno;
select 'download pdf' as download, *
                                   *
ERROR at line 1:
ORA-00936: missing expression

如果您指定所有表(连同星号),那么它可以工作,但是 - 再一次 - 这是不好的做法:

SQL> select 'download pdf' as download, d.*, e.*
  2  from dept d left join emp e on e.deptno = d.deptno;

DOWNLOAD         DEPTNO DNAME          LOC                EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
------------ ---------- -------------- ------------- ---------- ---------- --------- ---------- -------- ---------- ---------- ----------
download pdf         10 ACCOUNTING     NEW YORK            7782 CLARK      MANAGER         7839 09.06.81       2450                    10
download pdf         10 ACCOUNTING     NEW YORK            7839 KING       PRESIDENT            17.11.81       5000                    10
download pdf         10 ACCOUNTING     NEW YORK            7934 MILLER     CLERK           7782 23.01.82       1300                    10
<snip>

15 rows selected.

SQL>

在你的情况下,你会

SELECT 'DOWNLOAD PDF' as "DOWNLOAD", bj.*, r.*, bdc.*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 2013-05-24
    • 1970-01-01
    • 2022-12-19
    • 2023-01-12
    • 2020-08-13
    • 1970-01-01
    相关资源
    最近更新 更多