2

2つのテーブルを含むデータベースを作成しようとしています。これが役立つ場合は、create_tables.sqlコードを含めました。STKEYを定義キーにする関係を設定して、クエリを使用してthrキーを検索し、この生徒が抱えている問題を表示できるようにしようとしています。私が使用して検索する瞬間:

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

1 に答える 1

4

テーブルで外部キー リレーションシップを正しく定義しましたが、クエリを実行するときに結合条件を指定する必要があります。それ以外の場合は、2 つのテーブルのデカルト積が得られます (一方のすべての行にもう一方のすべての行を掛けたもの)。

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%'
于 2012-06-13T00:23:06.757 に答える