我有5个不同的表T_DONOR,T_RECIPIENT_1,T_RECIPIENT_2,T_RECIPIENT_3和T_RECIPIENT_4。所有5个表都具有相同的CONTACT_ID。
这是T_DONOR表:
T_RECIPIENT_1:
T_RECIPIENT_2:
这就是我希望最终表格与更多收件人及其信息在右边的情况。
T_RECIPIENT_3和T_RECIPIENT_4与T_RECIPIENT_1和T_RECIPIENT_2相同,只是它们具有不同的RECIPIENT ID和不同的名称。我想将所有这5个表组合在一行,我可以将DONOR_CONTACT_ID作为他的信息,然后是所有收件人的信息。
问题在于,当我尝试运行查询时,它不起作用,因为并非所有捐赠者都填充了所有收件人字段,因此查询将运行并给出一个空白表。有些情况下,我有一个有4个收件人的捐款人,有时我有一个只有1个收件人的捐款人,所以这会导致问题。我已经尝试运行查询,我将它们与DONOR_CONTACT_ID连接,但这只有在所有RECIPIENT字段都被填充时才有效。有关该怎么办的任何建议?有没有办法在VBA中操纵这个?我只知道一些VBA,我不是专家。
答案 0 :(得分:1)
首先我想你想要T_DONOR
的所有行。然后,当您收到DONOR_CONTACT_ID
个匹配项时,您希望从收件人表中提取信息。如果这是正确的,LEFT JOIN T_DONOR
到其他表。
从一组更简单的字段开始;您可以在连接设置正确返回所需的其他数据后添加“名称”字段。
SELECT
d.DONOR_CONTACT_ID,
r1.RECIPIENT_1,
r2.RECIPIENT_1
FROM
(T_DONOR AS d
LEFT JOIN T_RECIPIENT_1 AS r1
ON d.ORDER_NUMBER = r1.ORDER_NUMBER)
LEFT JOIN T_RECIPIENT_2 AS r2
ON d.ORDER_NUMBER = r2.ORDER_NUMBER;
注意FROM
子句中的括号。对于包含多个连接的任何查询,db引擎都需要它们。如果可能,请在查询设计器的“设计视图”中设置联接。查询设计器知道如何添加括号以保持数据库引擎满意。
这是一个没有别名表名的版本,以防在查询设计器中更容易理解和设置......
SELECT
T_DONOR.DONOR_CONTACT_ID,
T_RECIPIENT_1.RECIPIENT_1,
T_RECIPIENT_2.RECIPIENT_1
FROM
(T_DONOR
LEFT JOIN T_RECIPIENT_1
ON T_DONOR.ORDER_NUMBER = T_RECIPIENT_1.ORDER_NUMBER)
LEFT JOIN T_RECIPIENT_2
ON T_DONOR.ORDER_NUMBER = T_RECIPIENT_2.ORDER_NUMBER;
答案 1 :(得分:0)
SELECT T_DONOR.ORDER_NUMBER, T_DONOR.DONOR_CONTACT_ID, T_DONOR.FIRST_NAME, T_DONOR.LAST_NAME, T_RECIPIENT_1.RECIPIENT_1, T_RECIPIENT_1.FIRST_NAME, T_RECIPIENT_1.LASTNAME
FROM T_DONOR
JOIN T_RECIPIENT_1
ON T_DONOR.DONOR_CONTACT_ID = T_RECIPIENT_1.DONOR_CONTACT_ID
这将向您展示如何加入第一个收件人表,您应该能够为其他三个表遵循相同的结构......