mysql - select * from table1, table2 where table1.id = 1 显示具有其他 id 的值
问题描述
我只是看不到我如何制作外键的问题,我真的很困惑为什么我总是得到错误的结果。这是我工作台的屏幕截图
这是我的表:
这是我的图表
我还尝试规范化我的表,我有点期待我的查询返回一个类似的结果,就像在示例表(问题表)中它只会显示 2 个结果,因为我想查询where idsurvey = 1
我在这张图片中所做的:
我的问题是,如何修复我的外键,以便如果我想查询
select * from survey.survey, survey.questions where idsurvey = 1
它只会返回 2 行?(基于工作台屏幕截图中的示例数据)
对我的图表的任何意见和建议也将不胜感激。
解决方案
当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
推荐阅读
- certificate - 更新到 VSCode 1,56.1,现在从我的扩展程序中获取 REST 调用的证书错误。V 1.55.2 工作正常
- php - 在 json 中列出具有最新提交 id 的 git 分支
- c# - 悬停在游戏对象统一时如何显示文本
- next.js - NextJS 动态路由:如何捕获 index.tsx
- javascript - 如何跳过键值对中的未定义/缺失值
- symfony - Symfony 覆盖自动装配的服务
- python - 在mysql中存储带有特殊字符的字符串
- api - 类没有实例方法'[]' Flutter
- javascript - 如何在服务器端渲染中获取持久化的 redux 状态而不是初始状态?
- typescript - React Native 与 TypeScript tfjs-models/universal-sentence-encoder 模型加载错误