2012-02-14 7 views
0

テーブルとビューの内部結合に問題が発生しました。 ビューはpageviewforumで、カラムはforumn_no varchar2totalcountのカラムは各フォーラムの合計ページビュー数です。内部結合エラー - データを返しません。

別のテーブルには、 forumです:forum_no char(6), forumname varchar2(50)

私は出力forum_noとそのフォーラムの名前でtotalcountしたいが、それは動作しません。

select forum.forumname, totalcount from pageviewforum 
inner join forum on pageviewforum.forum_no= forum.forum_no; 

上記のクエリは、データなしのエラーメッセージを返します。 は私が

select forum.forumname, totalcount from pageviewforum 
inner join forum on pageviewforum.forum_no > forum.forum_no; 

から出てくると、データが出てくるか見てみました。私は好きなように使ってみましたが、データはありません。 どうすればいいですか?

+0

「ビュー」にクエリを追加できますか? –

+0

2つの 'forum_no'カラムの既存の値をチェックしましたか?共通の値がないようです... –

+0

あなたはこれを試してください:あなたはpgfrm.forum_no = frm.forum_noの上でprmfrmの内側の参加フォーラムfrmからpageviewforumからforum.forumname、pgfrm.totalcountを選択できますか? –

答えて

5

char(6)列の不確定サイズのvarchar2列を結合しているため、その違いが原因で実行されている可能性があります。これらの列に数値が入っている場合は、数値を保持するために数値型(INTEGERなど)を使用しないでください。それは長期的にはより信頼できるでしょう。一般に、結合列は同じタイプのものが最も信頼性高く動作します。彼らが異なるタイプのものである場合、あなたは2つのタイプが十分に互換性があるかどうか、それらが賢明に比較するかどうかについて心配する必要があります。

仮説:特に、CHAR(6)列は全長に空白で埋められます。 DBMSがこれらの末尾ブランクを除去しない限り、n個の文字がすべて使用されている場合を除き、CHAR(n)とVARCHAR(n)を比較することはできません。空白は等しいかどうかは重要ですが、大文字と小文字のどちらでも答えが出てくる可能性があるため、比較は機能します(>)。

観察:

  • データベース内の列の種類は問いません。
  • 一貫性が重要です。
+0

+1 varchar2はOracle固有のものではありませんか? –

+0

@ MarkBannister:Sorta - 他のDBMSにもエスケープされています。 –

関連する問題