简体   繁体   中英

Multiple OUTER JOIN

I'm really tired of access and its weirdo SQL syntax, I've browsed google and StackOverflow, I found hints but I can't manage to get my big query to work... I simply have multiple left outer joins that I can't arrange within parenthesis to get it accepted by this damn Access...

Could you please give me a hint on what's wrong with my joins ? Why is access complaining with: "JOIN SYNTAX error"

Thank you in advance really !

Miloud

SELECT ORDR.*, ITEM.*, ERAS.*, MAPP.New, KUMV.*
FROM ((GEN_ORDERS AS ORDR)
LEFT OUTER JOIN 
(    
(SELECT concat,ORDER_NUM, ConTY1 AS CT, ConValue1 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY2 AS CT, ConValue2 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY3 AS CT, ConValue3 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY4 AS CT, ConValue4 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY5 AS CT, ConValue5 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY6 AS CT, ConValue6 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY7 AS CT, ConValue7 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY8 AS CT, ConValue8 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY9 AS CT, ConValue9 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY10 AS CT, ConValue10 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY11 AS CT, ConValue11 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY12 AS CT, ConValue12 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY13 AS CT, ConValue13 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY14 AS CT, ConValue14 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY15 AS CT, ConValue15 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY16 AS CT, ConValue16 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY17 AS CT, ConValue17 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY18 AS CT, ConValue18 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY19 AS CT, ConValue19 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY20 AS CT, ConValue20 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY21 AS CT, ConValue21 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY22 AS CT, ConValue22 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY23 AS CT, ConValue23 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY24 AS CT, ConValue24 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY25 AS CT, ConValue25 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY26 AS CT, ConValue26 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY27 AS CT, ConValue27 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY28 AS CT, ConValue28 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY29 AS CT, ConValue29 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY30 AS CT, ConValue30 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY31 AS CT, ConValue31 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY32 AS CT, ConValue32 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY33 AS CT, ConValue33 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY34 AS CT, ConValue34 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY35 AS CT, ConValue35 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY36 AS CT, ConValue36 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY37 AS CT, ConValue37 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY38 AS CT, ConValue38 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY39 AS CT, ConValue39 AS CV FROM GEN_ITEMS UNION ALL
SELECT concat,ORDER_NUM, ConTY409 AS CT, ConValue40 AS CV FROM GEN_ITEMS) AS ITEM)
ON ORDR.ORDER_NUM = ITEM.ORDER_NUM
)
LEFT OUTER JOIN GEN_ERASALES AS ERAS ON ITEM.concat = ERAS.concat
LEFT OUTER JOIN MAPPING AS MAPP ON ITEM.CT = MAPP.Old
LEFT OUTER JOIN GEN_KUMV KUMV ON ERAS.DOCCOND = KUMV.KNUMV AND MAPP.New = KUMV.KSCHL

Access does not have Left Outer Join, just Left Join. You need parentheses for each join and you cannot have that AND:

SELECT ORDR.*, ITEM.*, ERAS.*, MAPP.New, KUMV.*
FROM (((GEN_ORDERS AS ORDR
LEFT  JOIN 

(.... Union ....) As Item
 ON ORDR.ORDER_NUM = ITEM.ORDER_NUM)


LEFT  JOIN GEN_ERASALES AS ERAS ON ITEM.concat = ERAS.concat)
LEFT  JOIN MAPPING AS MAPP ON ITEM.CT = MAPP.Old)
LEFT  JOIN GEN_KUMV KUMV ON ERAS.DOCCOND = KUMV.KNUMV 

You might like to use a sub query or WHERE for AND MAPP.New = KUMV.KSCHL , depending on your requirements.

EDIT I should add that Access will accept AND in joins, but in this case it leads to ambiguous outer joins, so some rearrangement is necessary.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM