MySQL:在三个表的同一列上获取表行

时间:2015-08-18 10:31:11

标签: mysql

我有三张桌子,第一张叫做#34; File" :

JobId    FilenameId    FileId
5        2             1  
7        3             2

第二个被称为"文件名"

Filename    FilenameId
File1         2    
File2         3

第三个被称为"客户" :

ClientId    JobId
1           5 
2           7

现在我想获取File1的ClientId,我该怎么办?我是SQL的新手。

感谢。

编辑:这是我尝试的但它不能正常工作

Select c.ClientId 
From `File` f, Filename fn, Client c
Where f.FilenameId = fn.FilenameId and f.JobId = c.JobId and fn.Filename = "File1";

2 个答案:

答案 0 :(得分:2)

首先,我讨厌有时会发生的负面戏,但是,你需要在学习过程中让自己更多地接受SQL教育。在这里查看现实生活场景以及人们如何为此提供不同的解决方案。

现在问你的问题。首先,摆脱旧式sql,将所有连接条件放在where子句中。开始了解表之间的正确关系。其次,您的WHERE子句应该是您特定条件的基础 - 例如您想要文件1.从那里,转到其他表。我个人的SQL编码标准首先显示了我想要的标准和表格。确保索引可用于优化查询。然后连接到其他表以获取完成数据行所需的其他元素。 (很好地使用表"别名",并保留它)。

首先,您的主要标准。很简单。

select
      fn.FileNameID,
      fn.FileName
   from
      FileName fn
   where
      fn.FileName = 'File1'

从那里开始,您可以通过联接来获取从文件到客户关系的下一条信息

select
      fn.FileNameID,
      fn.FileName,
      c.clientID
   from
      FileName fn
         JOIN File f
            on fn.FileNameID = f.FileNameID
            JOIN Client c
               on f.JobID = c.JobID
   where
      fn.FileName = 'File1'

注意从文件名到文件的分层缩进,然后从文件到客户端...您可以直观地看到表的关联方式。然后,只需根据需要抓取其他列,并使用适当的别名添加到字段列表中。

答案 1 :(得分:0)

试试这个:

从JobId中的Client选择ClientId(从File中选择JobId,其中FilenameId in(从Filename中选择FilenameId,其中Filename =“File1”));