2012-02-14 4 views
0

У меня возникают некоторые проблемы во внутреннем соединении с таблицей и представлением. Вид: pageviewforum Номер столбца: forumn_no varchar2 и колонка: totalcount.Это считается подсчет всех просмотров страниц в каждом форуме.Ошибка внутреннего соединения - возвращает данные

Другая таблица forum: forum_no char(6), forumname varchar2(50)

Я хочу, чтобы вывести totalcount с forum_no и его название форума, но он не работает.

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

Вы можете добавить запрос в свой 'view'? –

+0

Вы проверили существующие значения в двух столбцах 'forum_no'? Кажется, что нет общих значений ... –

+0

вы можете попробовать: Выберите forum.forumname, pgfrm.totalcount из pageviewforum pgfrm внутренний форум join frm на pgfrm.forum_no = frm.forum_no; –

ответ

5

Поскольку вы присоединяетесь к столбцу varchar2 неопределенного размера с помощью столбца char(6), возможно, из-за этого вы сталкиваетесь с различиями. Если эти столбцы содержат число, почему бы не использовать числовой тип (например, INTEGER) для хранения значений? Он будет более надежным в долгосрочной перспективе. Как правило, соединения столбцов работают наиболее надежно, когда они одного типа. Если речь идет о разных типах, вам нужно беспокоиться о том, насколько эти два типа достаточно совместимы и разумно ли они сопоставляются.

Гипотеза: В частности, колонка CHAR (6) заполнена пустым до полной длины; если СУБД не удаляет эти завершающие пробелы, вы никогда не сможете получить CHAR (n) и VARCHAR (n) для сравнения равными, если не используются все n символов. Сравнение > работает, потому что пробелы имеют значение для равенства, но больше или меньше, чем может придумать ответ.

Наблюдение:

  • Типы столбцов в базе данных имеют значения.
  • Консистенция важна.
+0

+1 Не является ли varchar2 специфичным для Oracle? –

+0

@MarkBannister: Sorta - он тоже сбежал в другую СУБД. –

Смежные вопросы