在mysql查询中使用条件

relj7zay  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(284)

我需要在mysql查询中有一个基于查询结果的条件。
这个 SELECT 还给我 IVC_Recipient 我想用这些数据来做一个条件。但它不起作用。
问题是:

SELECT 
    KDX_Id, 
    KDX_Name, 
    KDX_FirstName, 
    KDX_Company, 
    BOO_Id, 
    DEB_Date, 
    IFNULL(SUM(IVC_Sum + IVC_Taxes), 0) AS DEB_Total,
    DATEDIFF('2018-07-10', DEB_Date) AS DEB_Nb_Days,
    IVC_Recipient 
FROM ___Debtors 
JOIN ___Invoices 
    ON ___Invoices.IVC_Id = ___Debtors.DEB_InvoiceId 
JOIN ___Bookings 
    ON ___Bookings.BOO_Id = ___Invoices.IVC_BookingId

IF(IVC_Recipient = 'guest') {
    JOIN ___Kardex 
        ON ___Kardex.KDX_Id = ___Bookings.BOO_GuestId
}

IF(IVC_Recipient = 'company') {
    JOIN ___Kardex 
        ON ___Kardex.KDX_Id = ___Bookings.BOO_CompanyId
}

请问我这里缺什么?
谢谢。

ajsxfq5m

ajsxfq5m1#

你可以用 CASE 表达式:

SELECT 
    KDX_Id, 
    KDX_Name, 
    KDX_FirstName, 
    KDX_Company, 
    BOO_Id, 
    DEB_Date, 
    IFNULL(SUM(IVC_Sum + IVC_Taxes), 0) AS DEB_Total,  -- there is no GROUP BY
    DATEDIFF('2018-07-10', DEB_Date) AS DEB_Nb_Days,
    IVC_Recipient 
FROM ___Debtors 
JOIN ___Invoices 
    ON ___Invoices.IVC_Id = ___Debtors.DEB_InvoiceId 
JOIN ___Bookings 
    ON ___Bookings.BOO_Id = ___Invoices.IVC_BookingId
JOIN ___Kardex 
        ON ___Kardex.KDX_Id = (CASE 
             WHEN IVC_Recipient = 'guest' THEN  ___Bookings.BOO_GuestId
             WHEN IVC_Recipient = 'company' THEN ___Bookings.BOO_CompanyId
             END)
hs1rzwqc

hs1rzwqc2#

几乎所有的“如果”都可以表示为and,在这些情况下:

JOIN ___Kardex 
    ON (IVC_Recipient = 'guest' AND ___Kardex.KDX_Id = ___Bookings.BOO_GuestId)
    OR (IVC_Recipient = 'company' AND ___Kardex.KDX_Id = ___Bookings.BOO_CompanyId)

…但根据索引使用的工作方式,有时甚至可以更简单地联接并在where条件下对结果进行排序(尽管这将是我的最后手段“我们可以通过这种方式获得更快的速度”尝试)。

JOIN ___Kardex 
    ON  ___Kardex.KDX_Id IN (___Bookings.BOO_GuestId, ___Bookings.BOO_CompanyId)
WHERE (IVC_Recipient = 'guest' AND ___Kardex.KDX_Id = ___Bookings.BOO_GuestId)
    OR (IVC_Recipient = 'company' AND ___Kardex.KDX_Id = ___Bookings.BOO_CompanyId)

相关问题