2012-08-03 67 views
0

我有一個很長的查詢,我通過使用連接將其縮短出來,而生成的查詢如下,但它仍然有子查詢。如何轉換這個子查詢加入翻譯sql子查詢加入

SELECT 
    pav.post_id as Id, img.path as Path, attr.name as Name, pc.title as Category, pav.value_text as Valuess, post.created_on as createdOn 
FROM 
    postings post inner join post_attributes_values pav on post.post_id = pav.post_id 
    left outer join images img on post.post_id = img.post_id and img.sequence='1' 
    inner join attributes attr on pav.attr_id = attr.attr_id 
    inner join categories_parent_categories pc on attr.cat_id = pc.category_id 
where 
    pav.post_id in (select distinct post_id from post_attributes_values where value_text = 'SFX') 
+0

是不同的必要嗎?您是否搜索具有值'SFX'的特定屬性或任何屬性會執行? – 2012-08-03 10:52:16

+0

@NikolaMarkovinović:桌子的設計就像是有必要的。 – 2012-08-03 11:02:43

+0

獨特不應該在子查詢中不需要,因爲您只是在檢查.... – 2012-08-03 11:37:24

回答

1

閱讀你最後的留言馬太的回答後,我已經認識到,你真正想要所有職位其中的一個屬性有「SFX」的價值。如果我理解正確的,你唯一的選擇是增加派生表和POST_ID加盟:

SELECT pav.post_id  AS Id, 
     img.path  AS Path, 
     attr.name  AS Name, 
     pc.title  AS Category, 
     pav.value_text AS Valuess, 
     post.created_on AS createdOn 
FROM postings post 
     INNER JOIN post_attributes_values pav 
       ON post.post_id = pav.post_id 
     LEFT OUTER JOIN images img 
        ON post.post_id = img.post_id 
         AND img.sequence = '1' 
     INNER JOIN attributes attr 
       ON pav.attr_id = attr.attr_id 
     INNER JOIN categories_parent_categories pc 
       ON attr.cat_id = pc.category_id 
     INNER JOIN 
     (
      SELECT DISTINCT post_id 
      FROM post_attributes_values 
      WHERE value_text = 'SFX' 
     ) sfxPosts 
       ON pav.post_id = sfxPosts.post_id 

(查詢重新格式化感謝instant sql formatter。)

+0

將通過用派生表替換子查詢來改善性能嗎? – 2012-08-03 12:23:20

+0

@Sandy [此人解釋](http://stackoverflow.com/questions/1200295/sql-join-vs-in-performance)。它也很大程度上取決於你的sql引擎;沒有銀彈。最好的是自己測試一下。 – 2012-08-03 12:28:42

0

也許這樣?請測試它

SELECT 
    pav.post_id as Id, img.path as Path, attr.name as Name, pc.title as Category, pav.value_text as Valuess, post.created_on as createdOn 
FROM 
    postings post 
    inner join post_attributes_values pav on post.post_id = pav.post_id AND pav.value_text = 'SFX' 
    left outer join images img on post.post_id = img.post_id and img.sequence='1' 
    inner join attributes attr on pav.attr_id = attr.attr_id 
    inner join categories_parent_categories pc on attr.cat_id = pc.category_id 
+0

'pav'被提及兩次。您可能想要刪除最後一次發生。 – 2012-08-03 10:57:26

+0

對..我沒有看到它:)謝謝尼古拉 – 2012-08-03 10:58:54

+0

我已經嘗試過,但返回的行並不如預期。 – 2012-08-03 11:04:30