在mySQL查询中使用条件

在mySQL查询中使用条件,mysql,conditional-statements,Mysql,Conditional Statements,我需要在mySQL查询中根据查询结果设置一个条件 SELECT返回我IVC\U接收人,我想用这个数据来设定条件。但它不起作用 问题是: 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',

我需要在mySQL查询中根据查询结果设置一个条件

SELECT
返回我
IVC\U接收人
,我想用这个数据来设定条件。但它不起作用

问题是:

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
}    
请问我这里缺什么


谢谢。

您可以使用
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)
在这些情况下,几乎任何“如果”都可以表示为和:

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)