2

MySqlデータベースをSQLiteデータベースにエクスポートする必要があります。メディアから必要なデータのみを取得して、deSQLiteデータベースを可能な限り小さくします。

私は、最後のバージョンのエントリに関連し、公開されており、動物または植物のファイルではない、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;

そして、関連するメディアのみを取得するために、前の選択の結果に関連するメディアのみを返す「メディア」テーブルでSELECTを作成しようとしているので、両方を「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(SELECTAM.idMediaFROM....」」のみが必要です。

アドバイスをありがとう、そして私の英語をお詫びします、私は最善を尽くします。

4

1 に答える 1

2

JOININこれらの述語の代わりにテーブル:

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 に答える