我正在尝试在MySQL数据库中加入3个不同的表。我已经设法在有限的列上加入了2个表,但是我试图访问这些表中的所有列,以便将结果数据发布到网页上。我觉得我已经尝试了所有可能的联接组合,从内部联接到左外部联接和右外部联接。我已经研究过在表之间进行联合,但是我读到要使它们能正常工作,您需要具有相同数量的列,并且表中的列数量也不相同。
以下是有关我要加入的表的信息以及尝试查询数据库时使用的语法。
表格:
Breeds -> 10 columns, Breed_Name is a Unique Key and links to the other two tables.
Lifestyle -> 11 Columns, Breeds.Breed_Name is a foreign Key to the Lifestyle.Breed Column
Temperament -> 10 Columns, Breeds.Breed_Name is a foreign Key to the Temperament.Breed Column
MySQL语法
Select B.*, L.*, T.*
From Breeds as B
Right Outer Join Lifestyle as L on B.`Breed_Name` = L.`Breed`
Right Outer Join Temperament as T on B.`Breed_Name` = T.`Breed`
Where B.`Breed_Name` = "German Shepherd Dog"
我设法在某种程度上解决了这个问题,但是后来我做了一些更改(甚至不知道是什么),并且一切都停止了工作,而且我还没有找回它。但是奇怪的是,我能够使用“右外连接”从“品种和气质”中获取信息,但是无论我使用何种连接,都无法从“生活方式”中获取任何信息。当然,现在所有这些都不起作用。
我对联接类型没有足够的了解。我不明白为什么我们有不同的类型。我表中的信息是不同的,由于外键,它们仅在几列中匹配。如果可以的话,我会进行完全联接,因为我认为这是我真正需要的,但是MySQL不会进行完全联接(最后检查)。当我想要所有表中的所有信息时,如何确定需要哪种联接?
备查:
如果我设法使该查询正常工作,是否可以将查询扩展到所需的尽可能多的不同表?继续做:
(join-type) *This table* on table1.`column` = table2.`column`
还是在单个查询期间可能需要多种联接类型?如果是这样,您如何决定使用哪个?
编辑:
我已经处理了一些查询,如果删除了
WHERE B.
Breed_Name = "German Shepherd Dog"
,那么我回到了代码停止工作时的状态。但是我仍然无法访问Lifestyle中的信息。我的WHERE
语句有什么问题?是在错误的地方吗?我知道您可以在加入表时执行WHERE
语句。 。 。编辑2:
(只是让您对这些答案的帮助有所了解)
关于WHERE语句中单引号的答案的某些问题使我的整个页面消失了,我认为只有在语法有误的情况下,这种情况才会发生。如果我删除WHERE语句,奇怪的是所有答案都起作用。一个答案建议一个内部联接,一个建议一个左联接,一个建议仅联接,并且在某种程度上,如果没有WHERE语句,它们都会起作用。什么?一个答案在WHERE中使用了STRCMP,这似乎可行,但是我不明白这是什么(很好),而是希望使用简单的WHERE语句。有什么办法吗?
编辑3
我不知道发生了什么,但是现在我的Where语句正在工作,并且多个语法版本正在工作。数据库是否可以缓存结果而不显示更改?在我什么都无法工作之前,我感到困惑,但现在几乎所有东西似乎都在工作?以下3个代码均有效:
的MySQL
SELECT *
FROM `Breeds` as B
Left JOIN `Lifestyle` AS L ON B.`Breed_Name` = L.`Breed`
Left JOIN `Temperament` AS T ON B.`Breed_Name` = T.`Breed`
Where B.`Breed_Name` = "German Shepherd Dog"
SELECT *
FROM `Breeds` as B
inner JOIN `Lifestyle` AS L ON B.`Breed_Name` = L.`Breed`
inner JOIN `Temperament` AS T ON B.`Breed_Name` = T.`Breed`
Where B.`Breed_Name` = "German Shepherd Dog"
SELECT *
FROM `Breeds` as B
JOIN `Lifestyle` AS L ON B.`Breed_Name` = L.`Breed`
JOIN `Temperament` AS T ON B.`Breed_Name` = T.`Breed`
Where B.`Breed_Name` = "German Shepherd Dog"
虽然我很高兴它能奏效,但由于我不知道如何工作而感到沮丧。而且我以为在尝试提供多个表时必须使用
Select B.*, L.*, T.*
,为什么简单的Select *
可以工作?而且我不明白为什么我的WHERE语句在以前没用过时突然起作用。可能是因为语法有细微变化吗?现在,表名前后都用引号引起来。我期待阅读更多的答案,并感谢您迄今为止提供的所有帮助。
最佳答案
在MySQL中,这应该可以帮助您。不知道表的实际结构如何,这只是一个近似值。
SELECT *
FROM `Breeds` as B
JOIN `Lifestyle` AS L ON B.`Breed_Name` = L.`Breed`
JOIN `Temperament` AS T ON B.`Breed_Name` = T.`Breed`
WHERE B.`Breed_Name` = 'German Shepherd Dog';
让我知道这是否使您接近。
(编辑)看到您的编辑,在MySQL中使用单引号指定您的谓词是字符串。
关于mysql - 我在连接3个MySQL表时遇到问题,如何改善语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31329445/