【问题标题】:Need to use criteria from multiple tables to acquire data from multiple tables需要使用多个表中的条件从多个表中获取数据
【发布时间】:2011-10-26 13:46:44
【问题描述】:

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

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

【问题讨论】:

    标签: mysql database multiple-tables cartesian-product


    【解决方案1】:

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

    【讨论】:

    • 捶着额头 完全愚蠢。我的原始查询不起作用,因为在方法的后面还有更多附加到它们。长话短说,除了您刚刚发布的那个之外,我的扩展“AND”查询有效。所以,谢谢。
    猜你喜欢
    • 2020-09-24
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多