-2

私はこれらの3つの別々のクエリを持っています、ここにそれらの疑似バージョンがあります:

SELECT packageid from tblhosting where userid=1234 AND id=4351
SELECT id FROM tblcustomfields WHERE relid =tblhosting.packageid AND fieldname ='foo'
SELECT value FROM  `tblcustomfieldsvalues` WHERE  `fieldid` =tblcustomfields.id AND relid=tblhosting.id

現在、これらは個別のクエリであり、それぞれのサブクエリとして表示されます。それらを単一のクエリに結合することは意味がありますか?はいの場合、なぜ、どのようにこれを組み合わせる必要がありますか?

4

2 に答える 2

1

少し密集して申し訳ありませんが、あなたの質問はサブクエリを使用していないようです。

実際のコードがサブクエリを使用している場合、次の行に沿って

SELECT value 
FROM  `tblcustomfieldsvalues` 
WHERE  `fieldid` = 
   (SELECT id 
   FROM tblcustomfields 
   WHERE relid =(
     SELECT packageid 
     from tblhosting 
     where userid=1234 
     AND id=4351)
 AND fieldname ='foo')
AND relid=tblhosting.id

@Chopin のバージョンと比較するだけで、読みやすさの観点から結合がはるかに優れていることがわかります。

結合は、これを行う慣用的な方法でもあります。サブクエリ ベースのアプローチを検討しているほとんどの SQL 開発者は頭を悩ませます。これにより、保守性と拡張性が低下します。

パフォーマンスに関しては、クエリ オプティマイザーはそれらが同等であると認識すると思います。「より良い」バージョンからの改善はないかもしれません。

于 2012-06-21T13:30:04.630 に答える
0

クエリは次のようになります。

SELECT value FROM tblcustomfieldsvalues
INNER JOIN tblcustomfields ON tblcustomfields.id = tblcustomfieldsvalues.fieldid
INNER JOIN tblhosting ON tblhosting.packageid = tblcustomfields.relid
WHERE tblcustomfields.fieldname = 'foo' AND tblhosting.userid = 1234 AND tblhosting.id = 4351

ここでは と結合tblcustomfieldsvaluesしてtblcustomfieldsおり、最後は と結合していますtblhosting。条件を見て、ONそれらが正しく結合されていることを確認してください。

最後に、WHERE制約する属性に句を適用します。

お役に立てれば!

于 2012-06-21T13:16:14.603 に答える