[英]How to set condition in SQL query
SELECT partnumber, p.partdescription, i.invoicenumber, id.quantity, p.interchangeno, p.makemodelname , c.rte
FROM Invoice i,
invoicedetails id,
Parts p,
customer c
WHERE i.customerid = c.customerid
AND i.invoicenumber = id.invoicenumber
AND i.invoicenumber
AND id.partnumber = p.partNo
AND p.UnitsInStock < 0 AND id.quantity > 0;
在此查询中如何设置条件,如果interchangeNo 为空,则上面是正确的,如果interchangeNo 不为空,则选择interchangeNo 作为partNo
我想你需要一个案例陈述 -
SELECT partnumber, p.partdescription, i.invoicenumber, id.quantity,
CASE WHEN p.interchangeno IS NULL THEN p.interchangeno
ELSE partNo END interchangeno, p.makemodelname , c.rte
FROM Invoice i
JOIN invoicedetails id ON i.invoicenumber = id.invoicenumber
JOIN Parts p ON id.partnumber = p.partNo
JOIN customer c ON i.customerid = c.customerid
WHERE p.UnitsInStock < 0 AND id.quantity > 0;
看看https://www.w3schools.com/sql/func_mysql_if.asp和http://www.sqlservertutorial.net/sql-server-stored-procedures/sql-server-if-else/
SELECT p.interchangeno
FROM Invoice i,
invoicedetails id,
Parts p,
customer c
WHERE i.customerid = c.customerid
AND i.invoicenumber = id.invoicenumber
AND i.invoicenumber
AND id.partnumber = p.partNo
AND p.UnitsInStock < 0 AND id.quantity > 0;
if (p.interchangeno =0)
SELECT partnumber, p.partdescription, i.invoicenumber, id.quantity, p.interchangeno, p.makemodelname , c.rte
FROM Invoice i,
invoicedetails id,
Parts p,
customer c
WHERE i.customerid = c.customerid
AND i.invoicenumber = id.invoicenumber
AND i.invoicenumber
AND id.partnumber = p.partNo
AND p.UnitsInStock < 0 AND id.quantity > 0;
else
-- code that you want
我很确定这可以改进,但是您缺少的是 if else
您可以使用JOIN
查询连接多个表,有很多示例可供学习。
如果您使用JOIN
编写查询,您的查询将如下所示:
SELECT `INV_DTL`.`partnumber`, `P`.`partdescription`, `INV`.`invoicenumber`, `INV_DTL`.`quantity`,
(CASE WHEN `P`.`interchangeno` IS NULL THEN interchangeno_is_null ELSE interchangeno_is_not_null END) AS interchangeno, `P`.`makemodelname`, `C`.`rte`
FROM `invoice` INV
JOIN `invoicedetails` INV_DTL ON (`INV_DTL`.`invoicenumber` = `INV`.`invoicenumber`)
JOIN `parts` P ON (`P`.`partNo` = `INV_DTL`.`partnumber`)
JOIN `customer` C ON (`C`.`customerid` = `INV`.`customerid`)
WHERE `P`.`UnitsInStock` < 0 AND `INV_DTL`.`quantity` > 0;
学习JOIN
查询的有用链接。
您只需要以下查询部分来填写您的问题:
CASE WHEN `P`.`interchangeno` IS NULL THEN interchangeno_is_null ELSE interchangeno_is_not_null END
请在interchangeno_is_null
和interchangeno_is_not_null
上使用所需的值。
CASE
语句遍历条件并在满足第一个条件时返回一个值(如IF-THEN-ELSE
语句)。 因此,一旦条件为真,它将停止读取并返回结果。 如果没有条件为真,则返回ELSE
子句中的值。
语法是这样的:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE result
END;
学习CASE
语句的有用链接。
您也可以使用IFNULL()
。
SELECT partnumber, p.partdescription, i.invoicenumber, id.quantity,
IFNULL(p.interchangeno,p.partnumber), p.makemodelname , c.rte
FROM Invoice i join invoicedetails id on i.invoicenumber = id.invoicenumber
join Parts p on .... -- join condition goes here
join customer c on ... --join condition goes here
WHERE p.UnitsInStock < 0 AND id.quantity > 0
如上所述,始终使用现代的、显式的JOIN
语法,如我的查询所示
最好使用 JOIN 语法。
到上世纪末,逗号语法已经过时了。
然后你可以使用LEFT JOIN
并且一个CASE
允许一些逻辑。
SELECT
CASE
WHEN p.partNo IS NULL
THEN id.partnumber
WHEN p.interchangeno IS NOT NULL
THEN id.partnumber
ELSE p.partNo
END AS partNo,
p.partdescription,
i.invoicenumber,
id.quantity,
p.interchangeno,
p.makemodelname,
c.rte
FROM Invoice i
INNER JOIN invoicedetails id
ON id.invoicenumber = i.invoicenumber
INNER JOIN customer c
ON c.customerid = i.customerid
LEFT JOIN Parts p
ON p.partNo = id.partnumber
AND p.UnitsInStock < 0
WHERE id.quantity > 0;
使用COALESCE()
(或其 MySQL 版本IFNULL()
),如下所示:
SELECT partnumber, p.partdescription, i.invoicenumber, id.quantity, p.interchangeno,
p.makemodelname, c.rte
FROM Invoice i
JOIN invoicedetails id ON i.invoicenumber = id.invoicenumber
JOIN Parts p ON id.partnumber = COALESCE(p.interchangeno, p.partNo)
JOIN customer c ON i.customerid = c.customerid
WHERE p.UnitsInStock < 0
AND id.quantity > 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.