2012-06-13 7 views
2

Я пытаюсь создать базу данных, содержащую две таблицы. Я включил код create_tables.sql, если это поможет. Я пытаюсь установить отношение, чтобы сделать ключ STKEY определяющим, чтобы запрос можно было использовать для поиска ключа thr и показать, какие проблемы у этого ученика. В тот момент, когда я ищу, используя:SQL Relation and Query

SELECT * 
FROM student, student_log 
WHERE 'tilbun' like student.stkey 

Он отображает все проблемы в таблице, независимо от STKEY. Я думаю, что у меня может быть неправильно установлен внешний ключ. Я включил здесь create_tables.sql.

CREATE TABLE `student` 
(
`STKEY` VARCHAR(10), 
`first_name` VARCHAR(15), 
`surname` VARCHAR(15), 
`year_group` VARCHAR(4), 
PRIMARY KEY (STKEY) 
) 
; 

CREATE TABLE `student_log` 
(
`issue_number` int NOT NULL AUTO_INCREMENT, 
`STKEY` VARCHAR(10), 
`date_field` DATETIME, 
`issue` VARCHAR(150), 
PRIMARY KEY (issue_number), 
INDEX (STKEY), 
FOREIGN KEY (STKEY) REFERENCES student (STKEY) 
) 
; 

Приветствия за помощью.

ответ

4

Хотя вы правильно определили отношение внешних ключей в таблицах, вы должны указать условие соединения при выполнении запроса. В противном случае, вы получите декартово произведение двух таблиц (все строки одного раза все строки другого)

SELECT 
    student.*, 
    student_log.* 
FROM student INNER JOIN student_log ON student.STKEY = student_log.STKEY 
WHERE student.STKEY LIKE 'tilbun' 

И заметьте, что вместо того, чтобы использовать неявный JOIN (разделенный запятыми список таблиц), Я использовал явный INNER JOIN, который является предпочтительным современным синтаксисом.

Наконец, есть мало пользы для использования LIKE пункта вместо =, если вы также использовать подстановочные символы

WHERE student.STKEY LIKE '%tilbun%' 
+0

Я не могу пока upvote. Но спасибо, что это сработало. –