Oracle:从标题ok中选择,从view..0行中选择

时间:2017-10-09 19:44:16

标签: oracle

在我的oracle db上。

我有这张桌子

desc titolo

 IDTITOLO                                                                  NOT NULL NUMBER(11)
 TITOLO                                                                    NOT NULL VARCHAR2(190 CHAR)
 GENERE                                                                    NOT NULL NUMBER(11)
 ANNO                                                                      NOT NULL VARCHAR2(4 CHAR)
 FORMATO                                                                   NOT NULL NUMBER(11)
 DURATA                                                                    NOT NULL NUMBER(11)
 LINGUA                                                                    NOT NULL NUMBER(11)

并且工作正常

 select count(*) from titolo;

  COUNT(*)
----------
      2459

现在我创建一个视图..

将view generale创建为

SELECT TITOLO.IDTITOLO,
    TITOLO.TITOLO,
    TITOLO.ANNO,
    GENERE.GENERE,
    DURATA.DURATA,
    FORMATO.FORMATO,
    LINGUA.LINGUA
   FROM TITOLO,
    GENERE,
    DURATA,
    FORMATO,
    LINGUA
  WHERE TITOLO.GENERE = GENERE.IDGENERE AND TITOLO.DURATA = DURATA.IDDURATA AND TITOLO.FORMATO = FORMATO.IDFORMATO AND TITOLO.LINGUA = LINGUA.IDLINGUA
  ORDER BY TITOLO.IDTITOLO;

但是当我想查询我的观点时..

select count(*) from generale;

  COUNT(*)
----------
     0


 select * from generale;

   0 rows

语法没问题,在psql上运行正常..在oracle上返回0行。 为什么呢?

1 个答案:

答案 0 :(得分:1)

确保使用正确的列名进行连接。您正在为所有表使用内部联接..这意味着如果其中一个条件没有行,那么您可以获得0行,因为您的加入条件不匹配..

如果您还需要结果而不计算值,则应使用显式连接条件和左连接

  SELECT TITOLO.IDTITOLO,
      TITOLO.TITOLO,
      TITOLO.ANNO,
      GENERE.GENERE,
      DURATA.DURATA,
      FORMATO.FORMATO,
      LINGUA.LINGUA
     FROM TITOLO
     LEFT JOIN GENERE ON TITOLO.GENERE = GENERE.IDGENERE
     LEFT JOIN DURATA ON TITOLO.DURATA = DURATA.IDDURATA
     LEFT JOIN FORMATO ON TITOLO.FORMATO = FORMATO.IDFORMATO
     LEFT JOIN LINGUA ON  TITOLO.LINGUA = LINGUA.IDLINGUA
    ORDER BY TITOLO.IDTITOLO;