Oracle:从标题中选择确定,从视图中选择..0行
在我的oracle数据库上 我有这张桌子Oracle:从标题中选择确定,从视图中选择..0行,oracle,Oracle,在我的oracle数据库上 我有这张桌子 desc titolo IDTITOLO NOT NULL NUMBER(11) TITOLO NOT NULL VARCHAR2(190 CHAR) GENERE
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
现在我创建一个视图
将视图常规创建为
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行,因为您的联接条件不匹配 如果还需要不匹配值的结果,则应使用显式联接条件和左联接
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;
您确定select正在返回结果吗?从TITOLO、GENERE、DURATA、FORMATO、Linguaa和用于创建视图的select返回..?您确定满足where条件的所有表中都存在记录吗?简单地说,您没有一条记录满足以下条件:
其中TITOLO.genre=genre.idgenre和TITOLO.DURATA=DURATA.IDDURATA和TITOLO.FORMATO=FORMATO.IDFORMATO和TITOLO.LINGUA=LINGUA.IDLINGUA
意味着它在所有5个表中都有一条相关记录。提供您希望返回的记录数据。显示所有表中的关系。无论问题是什么,您都没有正确地说明它。显示单个表中的计数,且大于零。这怎么意味着该表与其他四个表的联接也必须返回一些东西呢?如果formato显示一个数字,这意味着它包含一个数字。。检查列名称(和相关值)是否正确,并且“我的视图”工作正常。。在我将值按正确的顺序放入sql之前,:(您的注释不清楚..您应该创建一个新问题,并使用适当的数据样本、实际结果和预期结果..一旦发布了新问题,您可以对链接进行注释..这样我就可以看一看了