Apex. Как вывести значения NULL тоже? - PullRequest
0 голосов
/ 10 марта 2019

У меня был вопрос с одним SQL-запросом, связанным с интерактивной таблицей в apex

Здесь, смотрите, я прописываю запрос, в котором я печатаю всех существующих художников в базе данных, но у меня есть только записи, в которых все поля имеют значения, и те, в которых по крайней мере один NULL не отображается

select artist.name as "Artist", country.name as "Country" , city.name as "City of foundation", label.name as "Label of records"  
from artist, country, city, label
where artist.country = country_id
and artist.city = city_id
and city.country = country_id
and artist.label = label_id

Как это исправить?

https://i.stack.imgur.com/ZRYzm.png

1 Ответ

2 голосов
/ 10 марта 2019

Поскольку вы не предоставили тестовый пример (скриншота недостаточно, по крайней мере, не для меня), я постараюсь показать, что может происходить, используя схему Скотта.

Есть 4 отдела: отдел примечаний 40 и тот факт, что в нем никто не работает:

SQL> select * from dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> select * from emp where deptno = 40;

no rows selected

Если вы хотите отобразить все 4 отдела и сотрудников, которые работают в них, вы должны присоединиться к таблице EMP и DEPT. Внешнее объединение позволяет отображать отдел 40 (в котором, как мы видели, нет сотрудников):

SQL> select d.deptno, d.dname, e.ename
  2  from dept d left join emp e on e.deptno = d.deptno      --> outer join is here
  3  order by d.deptno;

    DEPTNO DNAME          ENAME
---------- -------------- ----------
        10 ACCOUNTING     CLARK
        10 ACCOUNTING     MILLER
        10 ACCOUNTING     KING
        20 RESEARCH       JONES
        20 RESEARCH       SMITH
        20 RESEARCH       SCOTT
        20 RESEARCH       FORD
        20 RESEARCH       ADAMS
        30 SALES          WARD
        30 SALES          TURNER
        30 SALES          ALLEN
        30 SALES          JAMES
        30 SALES          MARTIN
        30 SALES          BLAKE
        40 OPERATIONS                       --> this is what you're looking for

15 rows selected.

SQL>

Вы получите тот же результат, если использовать старый оператор Oracle (+). Вы бы предпочли перейти на современные объединения и избегать этого оператора.

SQL> select d.deptno, d.dname, e.ename
  2  from dept d, emp e
  3  where d.deptno = e.deptno (+)        --> the old outer join operator
  4  order by d.deptno;

    DEPTNO DNAME          ENAME
---------- -------------- ----------
        10 ACCOUNTING     CLARK
        10 ACCOUNTING     MILLER
        10 ACCOUNTING     KING
        20 RESEARCH       JONES
        20 RESEARCH       SMITH
        20 RESEARCH       SCOTT
        20 RESEARCH       FORD
        20 RESEARCH       ADAMS
        30 SALES          WARD
        30 SALES          TURNER
        30 SALES          ALLEN
        30 SALES          JAMES
        30 SALES          MARTIN
        30 SALES          BLAKE
        40 OPERATIONS

15 rows selected.

SQL>
...