2012-06-06 88 views
1

我想在以下SQL查詢中使用JOIN而不是IN。我無法弄清楚如何去做。使用JOIN sql查詢

SELECT * FROM shop_orders WHERE 
id IN (SELECT orders_id FROM shop_orders_data WHERE closed='1' /*AND backorder='0'*/ AND exhibition_id='389' AND 
exhibition_id IN (SELECT id FROM shop_exhibitions WHERE 
country_id IN (SELECT id FROM countries WHERE id='72')) AND in_country = '72' AND 
exhibition_id IN (SELECT id FROM shop_exhibitions WHERE start<=1336946400 AND end>1336600800)) AND 
id IN (SELECT orders_id FROM shop_orders_products WHERE 
products_id IN (SELECT id FROM shop_products WHERE artno='120000' OR name LIKE '%120000%')) AND created>=1333231200 AND created<1333663200 ORDER BY created DESC 

我嘗試這樣做:

SELECT 
s.* 
FROM 
shop_orders s 
INNER JOIN shop_orders_data od ON s.id=od.orders_id 
INNER JOIN shop_exhibitions se ON od.exhibition_id=se.id 
INNER JOIN countries co ON se.country_id=co.id 
INNER JOIN shop_orders_products sop ON s.id=sop.orders_id 
INNER JOIN shop_products sp 
ON sop.products_id=sp.id 
WHERE od.closed=1 
AND (sp.artno='120000' or sp.name LIKE '%120000%') 
AND (od.exhibition_id='389') 
AND (od.in_country = '72') 
AND (se.start <=1336946400) 
AND (se.end >1336600800) 
AND (se.created>=1333231200) 
AND (se.created<1333663200) 
ORDER BY `s`.`created` DESC 

我這是否正確?

+0

你有沒有考慮閱讀第一聯接語法的文檔? – JohnFx

回答

2

看看這工作(並研究代碼,以瞭解它是如何工作):

SELECT * 
FROM shop_orders so 
JOIN shop_orders_data sod ON (
    (so.id = sod.orders_id) 
    AND (sod.closed = '1') 
    /*AND (sod.backorder = '0') */ 
    AND (sod.exhibition_id = '389') 
    AND (sod.in_country = '72') 
) 
JOIN shop_exhibitions se ON (
    (sod.exhibition_id = se.id) 
    AND (se.start <= 1336946400) 
    AND (se.end > 1336600800) 
) 
JOIN countries c ON (
    (se.country_id = c.id) 
    AND (c.id = '72') 
) 
JOIN shop_orders_products sop ON (
    (so.id = sop.orders_id) 
) 
JOIN shop_products sp ON (
    (sop.products_id = sp.id) 
    AND ((sp.artno='120000') OR (sp.name LIKE '%120000%')) 
) 
WHERE (so.created >= 1333231200) AND (so.created < 1333663200) 
ORDER BY so.created DESC; 
+0

謝謝,它的工作原理。您錯過了so.created DESC。 – Oualid

+0

好的。固定。我會贏得至少一個upvote!? :-) –

+0

如果不是他,那麼至少從我這裏來。 – RonLugge

1

join syntax是這樣的:

SELECT field1,field2,field3 
FROM FirstTable 
    JOIN SecondTable ON (FirstTable.PrimaryKey = SecondTable.ForeignKey) 
    JOIN ThirdTable ON (FirstTable.PrimaryKey = ThirdTable.ForeignKey) 

嘗試運用這種方法來查詢。