4

SQLite を使用してモバイル プロジェクトに取り組んでいるときに、次のコードのようなクエリに遭遇しました。

SELECT col_aa, col_ab FROM tbl_a
WHERE col_ac IN (SELECT col_ba FROM tbl_b WHERE col_bb IN (SELECT col_ca FROM tbl_c WHERE col_cb = 1))
AND col_ad IN (SELECT col_ba FROM tbl_b WHERE col_bb IN (SELECT col_ca FROM tbl_c WHERE col_cb = 1))

これらのサブクエリが冗長で無駄が多いことは明らかです。

いくつかの調査の結果、共通テーブル式である CTE が解決策になるようですが、その機能は SQLite では利用できません。(したがって、WITH temp AS ステートメントが機能するかどうかはわかりません)

サブクエリからの結果を再利用するためにクエリを再構築するより良い方法はありますか?

4

2 に答える 2

0

tbl_b.col_baそれが主キー(または単に一意のフィールド)であると仮定すると、簡単にJOIN役立つはずです。このSQLを試してください:

SELECT 
  col_aa, 
  col_ab 
FROM 
  tbl_a JOIN
    (
      SELECT col_ba 
      FROM tbl_b 
      WHERE col_bb IN 
       (
         SELECT col_ca 
         FROM tbl_c 
         WHERE col_cb = 1
       )
    ) T2 ON (col_ac = T2.col_ba AND col_ad = T2.col_ba) 

それが役立つことを願っています

于 2013-10-28T23:57:29.880 に答える