2013-08-30 3 views
0

У меня 2 таблицы:Oracle: запрос таблицы, но никаких результатов

CREATE TABLE teacher (
    tid varchar2(40), 
    tname varchar2(20) 
); 

CREATE TABLE student (
    sid varchar2(40), 
    sname varchar2(20), 
    tid varchar2(40) 
); 

Существует много данных в этих таблицах, но когда я выполнить SQL:

SELECT * 
FROM student s, teacher t 
WHERE s.tid = t.tid 

Eсть ничего. Я смущен, почему?

Есть ли что-нибудь связанное с "tid varchar2(40)"?

+0

Вы уверены, что у всех учеников есть учителя, которые также являются учителями? что означает 'select tid from student intersect, выберите tid from teacher' return? – Ben

+0

Не относится к вашей проблеме: но вы должны начать использовать явный синтаксис JOIN вместо неявных объединений в предложении where, особенно если вы новичок в SQL. –

ответ

1

Проверьте, есть ли у вас одинаковый размер в обеих таблицах. Если вы видите, что оба имеют одинаковый идентификатор и по-прежнему не имеют результата, у вас есть конечное пространство или любые специальные символы в конце (так как идентификатор здесь называется Varchar). Попробуйте обрезать запрос.

SELECT * 
FROM student s, teacher t 
WHERE trim(s.tid) = trim(t.tid); 
+0

Да, это все, спасибо за ваш совет! Еще одна вещь, Hibernate не имеет функции обрезать его? (потому что я использую Hibernate для запроса Учителя, чтобы получить набор учеников, у которых одинаковый размер) – jackxu

0

Вполне возможно, что ваши tid или sid поля имеют невидимые завершающие пробелы. Попробуйте дезинфицировать эти поля с помощью подстроечного пробельных:

UPDATE teacher SET tid = TRIM(tid); 
UPDATE student SET tid = TRIM(tid), sid = TRIM(sid); 
0

Это довольно необычно для столбца так, чтобы быть определен как varchar2. Обычно ключевые столбцы будут целыми числами, и вы не попадете в эту ситуацию.

Возможно, вам стоит пересмотреть схему, используя более подходящий тип данных.

+0

да, вы правы. i использовать фреймворк Hibernate и определить способ добавления первичного ключа , поэтому я могу иметь дело с совпадающими визитами. У вас есть совет для меня? – jackxu

+0

Существует хорошее обсуждение использования UUID в Oracle здесь: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2570145300346198113 –

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