我有一组桌子:

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'

09-26 03:40