MySQL Join不存在关联的地方

时间:2011-10-20 19:01:22

标签: mysql sql join

我为拥有2011年约会的网站的客户提供客户ID

SELECT customers.id
FROM customers 
INNER JOIN sites ON customers.id = sites.customer_id
INNER JOIN appointments ON appointments.site_id = sites.id
WHERE YEAR(appointments.day) = 2011   

我希望得到2011年没有任何约会的客户。对于如何去做而感到困惑。

4 个答案:

答案 0 :(得分:3)

有两种方式:

SELECT
    C.id
FROM
    Customers C
WHERE
    NOT EXISTS (
        SELECT *
        FROM
            Sites S
        INNER JOIN Appointments A ON
            A.site_id = S.id AND
            YEAR(A.day) = 2011
        WHERE
            S.customer_id = C.id
    )

或:

SELECT DISTINCT
    C.id
FROM
    Customers C
INNER JOIN Sites S ON
    S.customer_id = C.id
LEFT OUTER JOIN Appointments A ON
    A.site_id = S.id AND
    YEAR(A.day) = 2011
WHERE
    A.id IS NULL

答案 1 :(得分:1)

......年纪不到(appointmentments.day)= 2011

答案 2 :(得分:0)

应该做一个答案而不是编辑。由于缩放,不想真正寻找NULL。

SELECT id
FROM customers 
WHERE NOT EXISTS (SELECT * FROM sites 
                      INNER JOIN appointments ON appointments.site_id = sites.id
                  WHERE sites.customer_id = customers.id AND YEAR(appointments.day) = 2011)

答案 3 :(得分:0)

 SELECT customers.id
 FROM customers, sites, appointments
 WHERE (customers.id = sites.customer_id and appointments.id = sites.id) 
 and  YEAR(appointments.day) <> 2011

请检查您的特定数据库服务器“&lt;&gt;”这是“不平等”。