簡體   English   中英

如何在SQL查詢中設置條件

[英]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.asphttp://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_nullinterchangeno_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM