Внутренняя ошибка соединения - не возвращает данных - PullRequest
0 голосов
/ 14 февраля 2012

Я сталкиваюсь с некоторыми проблемами при внутреннем соединении таблицы и представления.Представление - 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;

и данные выходят.Я пытался использовать как, но он говорит, что нет данных, а также.Что я могу сделать?

1 Ответ

5 голосов
/ 14 февраля 2012

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

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

Замечания:

  • Типы столбцов в базе данныхимеет значение.
  • Согласованность важна.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...