我有一组桌子:
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
为“视频”的结果。我尝试简单地添加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'