【问题标题】:Using JOINS in MySQL在 MySQL 中使用 JOINS
【发布时间】:2009-11-19 12:39:10
【问题描述】:

我有这个完美的查询:

SELECT *
FROM Customer
WHERE SacCode IN
(
    SELECT SacCode
    FROM SacCode
    WHERE ResellerCorporateID = 392
    ORDER BY SacCode
)
AND CustomerID IN
(
    SELECT CxID
    FROM CustAppointments
    WHERE AppRoomID IN
    (
        SELECT AppRoomID
        FROM ClinicRooms
        WHERE ClinID IN
        (
                SELECT ClinID
                FROM AppClinics
                WHERE ClinDate >='20090101'
                AND ClinDate <='20091119'
        )
    )
)

但是,我需要查看 ClinDate 的值(在最后一个嵌套查询中),所以我被告知我需要使用 JOINS 重新处理查询。

我不知道怎么做,有人可以帮忙吗?

谢谢。

【问题讨论】:

  • 为此提供的任何解决方案都将返回与您发布的查询不同的结果,因为您使用的是*。出于这个原因,您应该完全避免这种情况,并列举您感兴趣的所有领域。

标签: sql mysql join


【解决方案1】:

这是一个开始:

SELECT     *
FROM       Customer c
INNER JOIN CustAppointments ca ON ca.CxId = c.CustomerID
INNER JOIN ClinicRooms cr ON cr.AppRoomID = ca.AppRoomID
INNER JOIN AppClinics ac ON ac.ClinID = cr.ClinID
WHERE      ap.ClinDate BETWEEN '20090101' AND '20091119'
AND        SacCode IN (SELECT sc.SacCode 
                       FROM SacCode sc 
                       WHERE sc.ResellerCorporateID = 392)

这将允许您从 AppClinics 中选择列。

【讨论】:

  • 它将为客户返回多条记录,其中连接中有多个匹配项。但是,如果有很多约会符合数据标准,这可能就是我们想要的。只是原始查询每个客户只返回一条记录
  • 绝妙的解决方案。很高兴看到(不是)他们在一张桌子上选择CustomerID,在另一张桌子上选择CxId
  • 如果您希望它返回单个客户值,您要么必须提交分组规则,要么在业务级别处理它。
【解决方案2】:
猜你喜欢
  • 2016-02-07
  • 2015-04-05
  • 1970-01-01
  • 2016-07-23
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多