我对特定的SQL查询有些h。我需要从两个表中联接数据,同时还要通过第三个表来限制数据(但不一定要抓取它)。下表如下:

    MEMBERS(member_id,first_name,last_name)
    MEMBERS_GROUPS(member_id,group_id)
    CHARGES(charge_id,member_id,charge_amount,status)


我需要查找特定组的所有成员的所有费用,但我也想从MEMBERS表中获取名字和姓氏。到目前为止,我提出的查询是:

select c.*, m.first_name, m.last_name
FROM charges c
LEFT JOIN member m
    ON c.member_id=m.member_id
INNER JOIN members_groups mg
    ON mg.group_id=1


我也尝试过:

SELECT c.*, m.first_name, m.last_name
FROM charges c, members_groups mg, member m
WHERE c.member_id=mg.member_id
   AND mg.group_id = 1
   AND c.status='Valid'
   AND c.member_id = m.member_id


…但是都不返回我需要的数据。我敢肯定,我想得太多了,但是我无法终生获得正确的价值观。我一直在得到看似笛卡尔积的东西-无论如何,它显然返回了太多的行和错误的数据。

最佳答案

也许您需要的是也将members_groups上的INNER JOIN限制为
那些带有mg.member_id = m.member_id的行:

SELECT c.*, m.first_name, m.last_name
FROM charges c
LEFT JOIN member m
    ON c.member_id=m.member_id
INNER JOIN members_groups mg
    ON mg.group_id=1
    AND mg.member_id = m.member_id

09-26 22:11