需要使用多个表中的条件来从多个表中获取数据

时间:2011-08-13 21:31:42

标签: mysql database multiple-tables cartesian-product

我对某个特定的SQL查询有点打嗝。我需要连接来自两个表的数据,同时还通过第三个表限制数据(但不一定是抓取它)。表格如下:

    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

...但两者都不返回我需要的数据。我敢肯定我是在思考这个,但我不能为我的生活得到正确的价值观。我不断得到笛卡尔积的产品 - 无论如何,它显然会返回太多行和坏数据。

1 个答案:

答案 0 :(得分:0)

也许您需要的是将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