在我的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行。 为什么呢?
答案 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;