1

次の SQL クエリで、IN の代わりに JOIN を使用したいと思います。私はそれを行う方法を理解できません。

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

私はこれが正しいですか??

4

2 に答える 2

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;
于 2012-06-06T21:22:49.623 に答える
1

結合構文は次のように機能します。

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

このアプローチをクエリに適用してみてください。

于 2012-06-06T21:15:34.790 に答える