![](/img/trans.png)
[英]How do you pull all data from a joined table when a related record contains a given value in MySQL?
[英]How do I pull out data from a group of tables based on an related table value with SQLite?
我有一组桌子:
1) **nanoInst**:
rid | api_id | name | instLoc | instText | pixelPitch | logo | listImg
2) **nanoFiles**:
rid | api_id | name | fileType | fileLoc
3) **nanoInd**:
rid | api_id | name
4) **nanoRelInd**:
rid | inst_id | ind_id
5) **nanoGalleries**:
rid | inst_id | file_id | gallery_order
我的原始SQL语句简单地从nanoInst表中选择了ID和名称,从nanoFiles中选择了文件位置,并从nanoInd中选择了存储nanoInst ID的nanoInd名称,并在其中实现了NanoInst和nanoInd的ID。
SELECT
nanoInst.rid as instID,
nanoInst.name AS nanoName,
nanoFiles.fileLoc AS nanoFile,
nanoInd.name AS indName
FROM nanoInst
LEFT JOIN nanoFiles ON nanoInst.logo = nanoFiles.rid
LEFT JOIN nanoRelInd ON nanoInst.rid = nanoRelInd.inst_id
LEFT JOIN nanoInd ON nanoRelInd.ind_id = nanoInd.rid
我需要调整此语句,以便仅在nanoFiles.fileType
为“ video”的情况下得到结果。 我试着简单地添加WHERE nanoFiles.fileType='video'
但返回0行,但我知道一些存在。
- 编辑 -
我发现,如果我可以计算该行视频中的项目数,然后运行WHERE子句进行过滤:
SELECT
nanoInst.rid as instID,
nanoInst.name AS nanoName,
nanoFiles.fileLoc AS nanoFile,
nanoInd.name AS indName,
nanoFiles.fileType as nanoType,
(SELECT
COUNT(nanoGalleries.rid)
FROM nanoGalleries
LEFT JOIN nanoFiles ON nanoFiles.rid = nanoGalleries.file_id
LEFT JOIN nanoInst ON nanoInst.rid = nanoGalleries.inst_id
WHERE nanoFiles.fileType = 'video') AS vidCount
FROM
nanoInst
LEFT JOIN nanoFiles ON nanoInst.logo = nanoFiles.rid
LEFT JOIN nanoRelInd ON nanoInst.rid = nanoRelInd.inst_id
LEFT JOIN nanoInd ON nanoRelInd.ind_id = nanoInd.rid
WHERE vidCount > 0
问题是vidCount
返回的视频总数不只是该行的计数/ nanoInst.rid
由于nanoRelInd或nanoInd中没有匹配的记录,因此记录可能已被过滤掉。 如果是这样,这应该可行。
SELECT
nanoInst.rid as instID,
nanoInst.name AS nanoName,
nanoFiles.fileLoc AS nanoFile,
nanoInd.name AS indName
FROM
nanoInst
LEFT JOIN nanoFiles ON nanoInst.logo = nanoFiles.rid
LEFT outer JOIN nanoRelInd ON nanoInst.rid = nanoRelInd.inst_id
LEFT outer JOIN nanoInd ON nanoRelInd.ind_id = nanoInd.rid
WHERE
nanoFiles.fileType='video'
基于原始帖子中的评论和您提供的sqlfiddle:
SELECT *
FROM nanogalleries
LEFT JOIN nanofiles on(nanofiles.rid=nanogalleries.file_id)
WHERE nanofiles.filetype='video';
http://sqlfiddle.com/#!9/e318a/1/0
根据评论更新答案
SELECT nanogalleries.inst_id,
nanoinst.name AS nanoName,
nanoFiles.fileLoc,
nanoInd.name AS indName,
count(nanogalleries.inst_id) AS vidCount
FROM nanogalleries
LEFT JOIN nanofiles ON nanofiles.rid = nanogalleries.file_id
LEFT JOIN nanoinst ON nanoinst.rid = nanogalleries.inst_id
LEFT JOIN nanoRelInd ON nanoinst.rid = nanoRelInd.inst_id
LEFT JOIN nanoInd ON nanoind.rid = nanorelind.ind_id
WHERE nanofiles.filetype = 'video'
GROUP BY nanogalleries.inst_id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.