首页 > 解决方案 > select * from table1, table2 where table1.id = 1 显示具有其他 id 的值

问题描述

我只是看不到我如何制作外键的问题,我真的很困惑为什么我总是得到错误的结果。这是我工作台的屏幕截图

在此处输入图像描述

这是我的表:

在此处输入图像描述 在此处输入图像描述

这是我的图表

在此处输入图像描述

我还尝试规范化我的表,我有点期待我的查询返回一个类似的结果,就像在示例表(问题表)中它只会显示 2 个结果,因为我想查询where idsurvey = 1我在这张图片中所做的: 在此处输入图像描述

我的问题是,如何修复我的外键,以便如果我想查询

select * from survey.survey, survey.questions where idsurvey = 1

它只会返回 2 行?(基于工作台屏幕截图中的示例数据)

对我的图表的任何意见和建议也将不胜感激。

标签: mysql

解决方案


from子句中有两个表时,第一个表中的每一行都与第二个表中的每个表匹配。这被称为笛卡尔积。通常,这不是你想要的行为(就像在这种情况下不是这样),你会使用一个条件来告诉数据库如何匹配这两个表:

SELECT *
FROM   survey.survey s, survey.questions q
WHERE  s.idsurvey = q.survey_id AND idsurvey = 1

虽然这应该可行,但在同一from个子句中使用多个表已经过时了。您可能应该使用显式join子句:

SELECT *
FROM   survey.survey s
JOIN   survey.questions q ON s.idsurvey = q.survey_id
WHERE  idsurvey = 1

推荐阅读