我对特定的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