如何在查询中将5个表和相同的ID组合在一起?

时间:2013-07-16 16:59:36

标签: vba ms-access access-vba

我有5个不同的表T_DONOR,T_RECIPIENT_1,T_RECIPIENT_2,T_RECIPIENT_3和T_RECIPIENT_4。所有5个表都具有相同的CONTACT_ID。

这是T_DONOR表:

T_DONOR

T_RECIPIENT_1: enter image description here


T_RECIPIENT_2: enter image description here


这就是我希望最终表格与更多收件人及其信息在右边的情况。

enter image description here


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,我不是专家。

2 个答案:

答案 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

这将向您展示如何加入第一个收件人表,您应该能够为其他三个表遵循相同的结构......