2009-07-13 12 views
0

私はこの作業SQL文を持っている:ネスト解除SQL文

select oriseqs.newID from oriseqs WHERE oriseqs.singlets=1 AND 
oriseqs.newID not in (select newID from cleanreport WHERE trash!="") 

私の質問は1つが、この特定のケースでは、別の内部で選択やって回避する方法です。私は選択されたステートメントが入れ子にされた選択がないように書き直すことを意味します。

CREATE TABLE cleanreport(newID TEXT, perc TEXT, inicoord INTEGER, endcoord INTEGER, ilen INTEGER, trash TEXT, comments TEXT); 
CREATE TABLE oriseqs(newID TEXT, oldID TEXT, rawseq TEXT, singlets BOOLEAN); 
+0

スキーマの半分以上は省いています.2つのテーブルにはどのようなインデックスがありますか? –

答えて

1

は、SQLのほぼすべての問題にアプローチするために複数の方法があります。

は、ここで必要に応じて、関連するスキーマです。あなたの特定の問題では、最初の選択肢は、左外部結合を使用して、2番目のテーブルの結合された列にnullをテストすることです。しかし、あなたが持っているクエリは完全に合理的です。少なくとも最初の点検時には、それを変えて疑う余地はないと思っています。それは、あなたが代替手段からより良い性能を見せるということです。

+0

QAエンジニアとしてimhoをネストされたクエリで残しておくことは、後でクエリをリバースエンジニアリングする方が簡単です。 – djangofan

+0

それは別の良い点です。左外部結合ソリューションの目的はそれほど明白ではありません。 –

0
select o.newID 
from   oriseqs  o 
left outer join cleanreport c on c.newID = o.newID 
WHERE o.singlets=1 
AND c.newID is null; 
3
SELECT oriseqs.newID 
FROM oriseqs AS o 
LEFT JOIN cleanreport AS cr ON o.newID = cr.newID 
WHERE oriseqs.singlets=1 
AND trash != "" 
AND cr.newID IS NULL 

のPKは何ですか?

+0

申し訳ありませんが、 "PKs"とは何ですか? – BlogueroConnor

+0

2つのテーブルのプライマリキー。私は通常プライマリキーをチェックして無効にしたいのです – dkretz

+0

'AND trash!= ""'をON句に移動する必要があります。これは、とにかくSQLiteの:( でクエリを動作しません、私は(それとしてそれを残して –

関連する問題