【问题标题】:Attempting an inner join; showing up with an error or no rows returned?尝试内连接;出现错误或没有返回行?
【发布时间】:2020-07-28 04:06:19
【问题描述】:

我是 SQL 的初学者,目前我正在使用 MySQL Workbench 来试验数据库。我已经制作了五张表,并尝试将其中两张进行内部连接,但它似乎不起作用。

我正在尝试将表“villager_name”加入“villager_species”。我在“villager_name”表中设置了与其他表关联的外键,包括物种表。

供参考: Villager Name Table Villager Species Table 我的所有表格中都有九个值。

对于我的内部连接,我使用了

select * from villager_name
INNER JOIN villager_species
ON villager_name.vname = villager_species.species;

最初,我使用“name”而不是“vname”,但它给了我一个错误,大概是因为它是一个声明的词。我改为将其更改为“vname”并运行它。 当我尝试这个时,返回 0 行。最终,我希望能够将我所有的表连接在一起,以便能够查看所有数据,但我需要先了解这个基本语法/想法。

Name table Species table

【问题讨论】:

  • 您的查询很好,这意味着没有与 on 条件匹配的行。请将 2 个表格的内容作为文本添加到问题中,以及表格定义和预期输出 - 全部作为文本。
  • 请使用文本,而不是图像/链接,以获取可以通过文本提供的内容。对于代码问题,请提供minimal reproducible examplehelp centerHow to Ask
  • 正如在 2 cmets 中已经说过的,提供文本,而不是图像/链接。请不要在帖子中使用“请”、“谢谢”等。对于代码问题,请提供minimal reproducible example--其中包括剪切、粘贴和可运行代码。 How to Askhelp center
  • 在代码问题中给出minimal reproducible example--剪切&粘贴&运行代码;具有期望和实际输出(包括逐字错误消息)的示例输入(作为初始化代码);标签和版本;明确的规范和解释。对于包含最少代码的错误,您可以给出的代码是您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)对于 SQL 包括 DDL 和表格初始化。当你得到一个你不期望的结果时,找出你的误解是什么。--隔离第一个错误的子表达式及其输入和输出。 (调试基础。)

标签: mysql sql join select


【解决方案1】:

您的语法没问题,但是您似乎没有加入正确的列。

没有看到你的实际数据是不可能确定的,但是从你表的结构来看,你建立的关系看起来是:villager_name(fk_idvillager_species) -> villager_species(pk_idvillager_species)

如果是这样,您的查询应该是:

select * 
from villager_name vn
INNER JOIN villager_species vs 
    on vs.pk_idvillager_species = vn.pk_idvillager_species;

注意事项:

  • 使用(有意义的)表别名(这里,vn 代表villager_namevs 代表villager_species)使查询更易于读写

  • 一般来说,不推荐使用select *;最好在from 子句中列出要输出的列(这也使您有机会为列名取别名以避免可能的冲突)

【讨论】:

  • 感谢您的建议!我一定会缩短表别名。我尝试使用该查询,但它最初没有工作,但我意识到它应该是“vn.fk_idvillager_species”,而不是使用“pk”作为主键。我试过了,我的表出现了,但没有返回结果。也许这是 MySQL Workbench 软件问题?或者也许我错过了什么......
【解决方案2】:

我不知道为什么它没有填充,所以我只是用

将每个值插入到表中
update villager_name set fk_idvillager_species = 1, fk_idvillager_personality = 1,fk_idvillager_style = 1,fk_idvillager_zodiac =1 
where pk_idvillagername = 1;

我只是更改了数字 1-9。但是,我确信有一种更快/更短的方法可以做到这一点。完成此操作后,我使用了 join 语句,它完成了我想要的操作。不过,我没有使用 *,而是指定了表格,所以我不只是拉出一堆没有值的列。

【讨论】:

    猜你喜欢
    • 2017-12-27
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多