necesita sintaxis para múltiples uniones con consultas incrustadas

M$ Access 2010

I have two tables CONTACT and AAEmail_X

Esto funciona muy bien

SELECT aa.[Contact ID], mm.Email AS [Personal Email]
FROM [CONTACT] AS aa
LEFT JOIN (
SELECT bb.[ClientID], bb.Email
FROM AAEmail_X AS bb
WHERE bb.Type = "Personal Email") AS mm
ON aa.[Contact ID] = mm.[ClientID];

note the embedded query contained within the parentheses.

Now I'd like to extend it to contain another embedded query

SELECT aa.[Contact ID], mm.Email AS [Personal Email], nn.Email AS [Business Email]
FROM ( [CONTACT] AS aa
LEFT JOIN (
SELECT bb.[ClientID], bb.Email
FROM AAEmail_X AS bb
WHERE bb.Type = "Personal Email") AS mm
ON aa.[Contact ID] = mm.[ClientID]  )
LEFT JOIN (
SELECT cc.[ClientID], cc.Email
FROM AAEmail_X AS cc
WHERE cc.Type = "Business Email") AS nn
ON aa.[Contact ID] = nn.[ClientID];

note the first join is enclosed within parantheses due to Access' quirky SQL implementation

This fails with Access prompting for a value to be manually entered for "Query2.ClientID"

So I think I'm tangled up in parentheses hell. Can anyone spot what's wrong?

TIA,

Steve aún aprendiendo

preguntado el 27 de noviembre de 13 a las 07:11

3 Respuestas

Try this, you started a bracket after the first FROM

SELECT aa.[Contact ID], mm.Email AS [Personal Email], nn.Email AS [Business Email]
FROM CONTACT AS aa
LEFT JOIN 
    (
        SELECT bb.[ClientID], bb.Email
        FROM AAEmail_X AS bb
        WHERE bb.Type = 'Personal Email'
    ) AS mm ON aa.[Contact ID] = mm.[ClientID]  

LEFT JOIN 
    (
        SELECT cc.[ClientID], cc.Email
        FROM AAEmail_X AS cc
        WHERE cc.Type = 'Business Email'
    ) AS nn ON aa.[Contact ID] = nn.[ClientID];

respondido 27 nov., 13:07

I think your parentheses are the problem... Try

SELECT aa.[Contact ID], mm.Email AS [Personal Email], nn.Email AS [Business Email]
    FROM ( [CONTACT] AS aa
    LEFT JOIN (
        SELECT bb.[ClientID], bb.Email
        FROM AAEmail_X AS bb
        WHERE bb.Type = "Personal Email") AS mm
    ON aa.[Contact ID] = mm.[ClientID]
    LEFT JOIN (
        SELECT cc.[ClientID], cc.Email
        FROM AAEmail_X AS cc
        WHERE cc.Type = "Business Email") AS nn
    ON aa.[Contact ID] = nn.[ClientID]
);

or

SELECT aa.[Contact ID], mm.Email AS [Personal Email], nn.Email AS [Business Email]
    FROM (( [CONTACT] AS aa
    LEFT JOIN (
        SELECT bb.[ClientID], bb.Email
        FROM AAEmail_X AS bb
        WHERE bb.Type = "Personal Email") AS mm
    ON aa.[Contact ID] = mm.[ClientID])
    LEFT JOIN (
        SELECT cc.[ClientID], cc.Email
        FROM AAEmail_X AS cc
        WHERE cc.Type = "Business Email") AS nn
    ON aa.[Contact ID] = nn.[ClientID]
);

respondido 27 nov., 13:08

This worked. Must have had some subtle misspelling or syntactical error.

SELECT aa.[Contact ID], mm.Email AS [Personal Email], nn.Email AS [Business Email]
FROM ( [CONTACT] AS aa
LEFT JOIN (SELECT bb.[ClientID], bb.Email FROM AAEmail_X AS bb WHERE bb.Type = "Personal     Email")  AS mm
ON aa.[Contact ID] = mm.[ClientID] )
LEFT JOIN (SELECT cc.[ClientID], cc.Email FROM AAEmail_X AS cc WHERE cc.Type = "Business Email")  AS nn
ON aa.[Contact ID] = nn.[ClientID];

Thanks to all who answered! Stackoverflow rocks!

Gracias de nuevo,

CASO CERRADO

Steve aún aprendiendo

respondido 27 nov., 13:20

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.