2009-07-04 75 views
0

所以我问了一些关于执行连接的问题,并得到了很好的答案,但仍然有一些我完全被困住了。mysql连接让我疯狂!

我有3张桌子。让我们称它们为table-b,table-d和table-e。
表b和表d共享一个名为p-id的列。
表e和表b共享一个名为ev-id的列。
表e也有一个名为日期的列。
表b还有一个称为u-id的唯一id列。

我想写一个查询,它在下列条件下返回u-id:
1)限制table -e.date中的某个值。
2)其中table-b.p-id与table-d.p-id不匹配。

我想我需要在e-id列上连接内联表-b和表-e。然后我想我需要在table-d和table-b上执行一个左连接,其中p-id为null。
我的问题是,我不知道写这个查询的语法。我知道如何编写多个内连接,并且我知道如何编写左连接。我如何结合这两者?

非常感谢所有帮助我的人。我(很明显!)是一个数据库的新手,我正在努力让自己的头脑一切都好!

+0

请后两个部分查询 - 它可以帮助我们,如果你表现出你到目前为止已经尝试过。 – 2009-07-04 18:09:20

+0

你确定条件2?例如如果你在表b和d中有2,3,4的p-id,你希望b中的2匹配d中的3和4,b中的3匹配d中的2和4,并且b中的4匹配2和3 in b?另外,你是否希望null中的b匹配null中的d? – 2009-07-04 18:13:40

回答

0

我觉得这件事情是这样的:

SELECT uid 
    FROM table-b 
    INNER JOIN table-e 
     ON table-b.ev_id = table-e.ev_id 
    WHERE table-b.p_id NOT IN (SELECT p_id from table-d) 
3

你只写了加入一个接一个:

SELECT b.uid 
    FROM b 
    INNER JOIN e USING(evid) 
    LEFT JOIN d USING(pid) 
    WHERE e.date = :whatever 
    AND d.pid IS NULL