在mySQL查询中使用条件
我需要在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',
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)