gpt4 book ai didi

SQL 关系和查询

转载 作者:行者123 更新时间:2023-12-04 18:19:19 24 4
gpt4 key购买 nike

我正在尝试创建一个包含两个表的数据库。如果有帮助,我已经包含了 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)
)
;

为帮助喝彩。

最佳答案

尽管您已经正确定义了表中的外键关系,但在执行查询时仍必须指定连接条件。否则,您将得到两个表的笛卡尔积(一个的所有行乘以另一个的所有行)

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%'

关于SQL 关系和查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11006633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com