我有三张桌子,第一张叫做#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";
答案 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”));