2つのテーブルから結果を取得する必要がある状況があります。表Aには「MEMBERS」、表Bには「MEMBERUDFS」という名前が付けられています。 'MEMBERS'のすべての行に 'MEMBERUDFS'というエントリがあるわけではないので、テーブルにLEFT JOINが必要です。私はMEMBERUDFSのエントリのすべてがこのクエリに関連しているわけではない、 'MEMBERUDFS'から基準と一致する 'MEMBERS'から行を引き出す必要があります。ここで私は同じヘルプが必要です。私の現在のクエリは、MEMBERSテーブルのすべてのフィールドとMEMBERUDFSの対応する行を返すため、各メンバに複数の行が返されます。私がしたいのは、MEMBERSデータと同じ行に返されたMEMBERUDFSテーブルのフィールドを持つことです。例えば、私が取得:SQLロジック - 2つのテーブル、テーブル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
どのRDBMSを使用していますか? –