我有一个关于 MySQl 中的内连接的问题。根据我对 MySQL 的有限理解,内连接生成的结果表仅包含两个表中都存在的行。也就是说,例如,如果 table1 包含 Joe 的一行和 Sally 的一行,而 table2 仅包含 Sally 的一行,则内部联接将仅包含一行:Sally 的行。
例如:
在包含 2 个表的数据库中,
表1(宠物)
petName petType
Unicorn Horse
Pegasus Horse
Lion Cat
表2(颜色)
petName petColor
Unicorn white
Unicorn silver
Fish Gold
使用查询
SELECT * FROM Pet,Color WHERE Pet.petName = Color.petName
为什么是查询的结果?
petName petType petName petColor
Unicorn Horse Unicorn white
Unicorn Horse Unicorn silver
为什么表1中只有1只“麒麟马”,而第二行却出现了“麒麟马”?我说 MySQL 与表 1 和表 2 中的术语“Unicorn”匹配,并列出两个表中包含“Unicorn”一词的行是否正确?然而,这样做会导致
petName petType petName petColor
Unicorn Horse Unicorn white
< NULL > Unicorn silver
MySQL 自动用表 1 中的“Unicorn Horse”行替换该值,因为它与查询中使用的“Unicorn”关键字匹配?
如果是这样,那么这样做有什么意义,因为 MySQL 只会在第二行中提供我没有用的冗余数据?另外,我可以通过使用来解决这个问题吗
SELECT * FROM Pet LEFT JOIN Color
ON Pet.petName=Color.petName
WHERE Pet.petName="Unicorn"?
我在 PHP & MYSQL for Dummies 中看到了这个例子,但似乎无法理解。 如果有人能澄清这一点,我将不胜感激。
最佳答案
结果符合预期。您正在使用两个表上的 PetName
列连接两个表。 Unicorn Horse
表 Pet
在结果集中显示了两次,因为它与表 Color
上的两条记录匹配。
要进一步了解有关联接的更多信息,请访问以下链接:
关于MySQL 内部连接结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16650737/