2

我需要将 MySql 数据库导出到 SQLite 数据库,我只从媒体中获取所需的数据,以使 de SQLite 数据库尽可能小。

我有一个查询,只给我与最新版本的条目相关的animalsMedias 或plantsMedias,已发布且未归档的动物或植物。

SELECT AM.*, max(A.version) AS version FROM animalsMedias AS AM INNER JOIN animals
AS A ON(AM.idAnimal = A.idAnimal AND A.filed = 0 AND A.published = 1) GROUP BY 
A.idLanguaje, A.idVersion;

为了只获取与媒体相关的内容,我尝试在“媒体”表上进行选择,该表只返回与上一次选择的结果相关的媒体,所以我将两者都放在“IN()”中,但我得到了错误:

#1241 - Operand should contain 1 column(s)

那就是查询:

SELECT * from medias 
WHERE idMedia IN(SELECT AM.*, max(A.version) AS version FROM
animalsMedias AS AM 
INNER JOIN animals AS A ON(AM.idAnimal = A.idAnimal AND A.filed = 0 
AND A.published = 1) 
GROUP BY A.idLanguaje, A.idVersion) 
OR idMedia IN(SELECT PM.*, max(P.version) AS version FROM plantsMedias AS PM 
INNER JOIN plants AS P ON(PM.idPlant = P.idPlant AND P.filed = 0 AND P.published = 1) 
GROUP BY P.idLanguaje, P.idVersion);

如果我必须只使用 1 个操作数,我如何获得“max(A.version)”?如果我理解得很好,在 IN 中我必须只有“IN(SELECT AM.idMedia FROM ....”才能正确。

谢谢你的建议,对不起我的英语,我尽力了。

4

1 回答 1

2

JOIN表而不是这些IN谓词:

SELECT 
  ....
  A.version AVersion,
  P.Version PVersion
FROM medias m
INNER JOIN animalsMedias AS AM  ON m.idMedia = am.Id
INNER JOIN plantsMedias  AS PM  ON m.idMedia = PM.ID
LEFT JOIN
(
  SELECT idAnimal, max(A.version) AS version 
  FROM animals
  WHERE A.filed = 0 
    AND A.published = 1     
  GROUP BY A.idLanguaje, A.idVersion 
) AS  A  ON AM.idAnimal = A.idAnimal 
LEFT JOIN
(
  SELECT idPlant, MAX(Version) version
  FROM Plants
  WHERE field = 0 AND published = 1
  GROUP BY P.idLanguaje, P.idVersion
) AS p ON PM.idPlant = P.idPlant;
于 2013-01-15T09:56:27.030 回答