У меня возникла ситуация, когда мне нужно получить результаты из двух таблиц. Таблица A называется «ЧЛЕНЫ», а таблица B называется «MEMBERUDFS». Мне нужно LEFT JOIN на таблицах, потому что не все строки в «MEMBERS» будут иметь запись в «MEMBERUDFS». Мне нужно вывести строки из «ЧЛЕНОВ», которые соответствуют критериям, и то же самое из «MEMBERUDFS» (не все записи в MEMBERUDFS относятся к этому запросу). Здесь мне нужна такая же помощь: мой текущий запрос возвращает все поля из таблицы MEMBERS и соответствующие строки из MEMBERUDFS, что приводит к нескольким строкам для каждого члена. Я бы хотел, чтобы поля из таблицы MEMBERUDFS возвращались в той же строке, что и данные MEMBERS. Например, я получаю:SQL Logic - две таблицы, несколько строк из таблицы 2
lastname firstname relationship email entrydate scancode sitename udflabel udfvalue expr1 expr2
doe jane p [email protected] 1/1/2016 1234 Home Guest Pass Yes steve holmes
doe jane p [email protected] 1/1/2016 1234 Home Pass Used No steve holmes
doe jane p [email protected] 1/1/2016 1234 Home Visited yes steve holmes
То, что я ищу это:
doe jane p [email protected] 1/1/2016 1234 Guest Pass Yes steve holmes Pass Used No Visited yes
Ниже мой запрос:
SELECT MEMBERS.lname, MEMBERS.fname, MEMBERS.relationship, MEMBERS.email, MEMBERS.entrydate,
MEMBERS.scancode, MEMBERS.siteid, SITES.sitename,
MEMBERUDFSETUPS.udflabel, MEMBERUDFS.udfvalue, EMPLOYEES.lname AS Expr1,
EMPLOYEES.fname AS Expr2
FROM MEMBERS
LEFT OUTER JOIN MEMBERUDFS ON MEMBERS.memid = MEMBERUDFS.memid
INNER JOIN MEMBERUDFSETUPS ON MEMBERUDFS.udfid = MEMBERUDFSETUPS.udfid
INNER JOIN SITES ON MEMBERS.siteid = SITES.siteid
INNER JOIN EMPLOYEES ON MEMBERS.employeeid = EMPLOYEES.employeeid
WHERE (MEMBERS.relationship = 'P')
AND (MEMBERS.siteid = @rvSite)
AND (MEMBERUDFS.udfid = '25' OR
MEMBERUDFS.udfid = '26' OR
MEMBERUDFS.udfid = '27')
AND (MEMBERS.entrydate BETWEEN @entryDateStart AND @entryDateEnd)
ORDER BY MEMBERS.entrydate DESC
Переместите условия MEMBERUDFS.udfid из предложения WHERE в предложение 'ON', если вы хотите получить истинное поведение левого соединения. (Так как теперь вы получаете регулярный результат внутреннего соединения.) – jarlh
Насколько я знаю, так работают объединения, если вы делаете это по-другому, как бы вы назвали дополнительные столбцы? и что, если каждый член имеет разное количество связанных UDF? – ArturoAP
Какие СУБД вы используете? –