Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL幼犬数据库:尝试使用内部联接进行特定查询,卡住了吗?_Mysql_Database - Fatal编程技术网

Mysql SQL幼犬数据库:尝试使用内部联接进行特定查询,卡住了吗?

Mysql SQL幼犬数据库:尝试使用内部联接进行特定查询,卡住了吗?,mysql,database,Mysql,Database,我有一个用于学习SQL的示例数据库,并尝试编写一个查询来选择puppies,以显示它知道的技巧,给定以下条件: 狗的id和名字 技巧id和名称 学习日期和技能水平 以下是我的数据库关系图的图片: 非常感谢您的帮助,请提前感谢这里是一个SQL查询: SELECT * From Puppy As p, Trick as t, Pappy_Trick as pt Where p.PuppyID = pt.PuppyId AND t.TrickID = pt.TrickID AND p.Puppy

我有一个用于学习SQL的示例数据库,并尝试编写一个查询来选择puppies,以显示它知道的技巧,给定以下条件:

狗的id和名字 技巧id和名称 学习日期和技能水平

以下是我的数据库关系图的图片:


非常感谢您的帮助,请提前感谢

这里是一个SQL查询:

SELECT *
From Puppy As p, Trick as t, Pappy_Trick as pt 
Where 
p.PuppyID = pt.PuppyId AND t.TrickID = pt.TrickID
AND p.PuppyID = 'value' AND PuppyName = 'value' AND t.TrickID = 'value' AND TrickName = 'value' AND DateLearned = 'value' AND SkillLevel = 'value';
重要的是where子句中的第一个条件

p.PuppyID = pt.PuppyId AND t.TrickID = pt.TrickID

这有助于链接3个表。

您需要使用链接表来加入Puppy和Trick表

SELECT *
FROM   Puppy AS P 
       INNER JOIN Puppy_Trick AS PT ON P.PuppyID = PT.PuppyID
       INNER JOIN Trick AS T ON T.TrickID = PT.TrickID

然后,选择实际需要的字段,而不是
选择*

首先,您永远不应该真正执行select*(返回所有列),具体指定您想要的列。这样,在将来,如果一个表发生更改并且列被删除,它将立即崩溃,您将立即知道为什么有些东西失败了,而不是猜测

 Select PuppyName, TrickName
 From Puppy 
 Join Puppy_Trick
 On Puppy.PuppyID = Puppy_Trick.PuppyID
 Join Trick
 On Puppy_Trick.PuppyTrickID = Trick.TrickID
接下来,在编写查询时,在表之间使用显式联接,而不考虑任何条件。这只是为了让您了解SQL中的关系是如何工作的。。。以下内容适用于您的图表。我使用“别名”(P代表puppy,PT代表puppy_技巧,等等)来帮助简化查询的长键入

select
      P.puppyID,
      P.PuppyName,
      P.Breed,
      PT.TrickID,
      PT.SkillLevel,
      PT.DateLearned,
      T.TrickName,
      TK.KennelName,
      TK.KennelAddress
   from
      Puppy P
         JOIN Puppy_Trick PT
            on P.PuppyID = PT.PuppyID
            JOIN Trick T
               on PT.TrickID = T.TrickID
               JOIN Trick_Kennel TK
                  on T.TrickID = TK.TrickID
                  JOIN Kennel K
                     on TK.TrickKennelID = K.TrickKennelID
请注意我的格式/对齐方式。我发现这有助于将一个关系视为一条链条。。。你不可能从小狗到狗窝不经过所有其他的

现在,标准。一旦你掌握了如何获得a-b-c-d-e关系的基本方法,你在寻找什么。您可以通过将“和”条件添加到表的相应联接来应用该条件。例如,如果您正在寻找“跳过篮圈”的技巧,这与实际描述的技巧表相关联,因此从上面

Join Trick T
   on PT.TrickID = T.TrickID
   AND T.TrickName = 'Jump through hoop'
如果你想为一只特定的小狗做点什么,因为那是根级别(即:查询中的第一个表),那就需要在上面所有内容的末尾添加一个“WHERE”子句

(因此,在加入犬舍后)


我不知道从哪里开始我知道我需要做一些内部连接,但是这个概念让人困惑,你还坚持这个问题吗?如果有人提供了答案或有帮助的回答,请注明。它将帮助我们帮助您获得所需的答案。
                      JOIN Kennel K
                         on TK.TrickKennelID = K.TrickKennelID
   WHERE
      P.PuppyName = 'Spot'