2012-06-13 119 views
2

我想創建一個包含兩個表的數據庫。如果這有幫助,我已經包含了create_tables.sql代碼。我試圖設置關係以使STKEY成爲定義鍵,以便查詢可用於搜索thr鍵並顯示此學生遇到的問題。當我搜索使用時:SQL關係和查詢

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' 

之一(次其他的所有列,行)和注意,而不是使用隱式連接(表的逗號分隔的列表),我已經使用了明確的INNER JOIN,這是首選的現代語法。

最後,幾乎沒有使用到使用LIKE條款,而不是=,除非你也可以使用通配符

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

我不能給予好評呢。但是,謝謝你,這已經奏效。 –