[英]SQL condition : if else statement
我正在使用這個特定的例子
https://www.w3schools.com/sql/sql_orderby.asp
我想獲取國家名稱以 Fr 開頭的客戶列表,如果 Fr% 中沒有客戶,那么我想在以 Ger 開頭的國家中尋找客戶,如果 Ger% 中沒有客戶,我想尋找客戶以 Au% 開頭的國家。
CREATE PROCEDURE cusBycon
AS
IF (SELECT COUNT(*) FROM Customers WHERE Country = "France") == 0
BEGIN
IF (SELECT COUNT(*) FROM Customers WHERE Country = "Germany") = 0
BEGIN
SELECT * FROM Customers WHERE Country = "Australia" as Country
END
ELSE
BEGIN
SELECT * FROM Customers WHERE Country = "Germany" as Country
END
END
ELSE
BEGIN
SELECT * FROM Customers WHERE Country = "France" as Country
END
GO;
EXEC cusBycon;
我收到錯誤“無法准備聲明”。 是否有執行相同操作的最佳方法。
謝謝
注意:您將此問題標記為 mySQL,但 Northwinds 數據庫不是 mySQL。例如,w3schools 不支持ORDER BY FIELD
,而 mySQL 支持,除此之外還有其他差異。
我不確定我會這樣 go 。 我想我會使用的是一個子查詢,像這樣:
SELECT * FROM Customers WHERE Country IN (
SELECT Country FROM Customers
WHERE Country IN ('France', 'Germany', 'Australia')
ORDER BY FIELD(Country, 'France', 'Germany', 'Australia')
LIMIT 1
)
在這種情況下,我將使用WHERE
將內部查詢限制為僅這三個國家/地區,然后我使用ORDER BY FIELD
按特定順序對其進行排序,最后使用LIMIT 1
僅返回最高記錄. 然后,外部查詢從表中選擇國家/地區與返回的內容匹配的所有內容。
我說這樣的話是因為我無法測試它。 w3schools 似乎不支持ORDER BY FIELD
。 所以你可以做一些類似但更笨重的事情:
SELECT * FROM Customers WHERE Country IN (
SELECT Country FROM (
SELECT Country,
CASE WHEN Country = 'France' THEN 1
WHEN Country = 'Germany' THEN 2
ELSE 3 END
FROM Customers
WHERE Country IN ('France', 'Germany', 'Australia')
ORDER BY 2 LIMIT 1
) z
)
在此示例中,我使用CASE WHEN
為國家/地區生成排序ORDER
,然后按該列對它們進行排序,在本例中使用 2(對於字段 2),因為該字段沒有名稱,因為我生成了它。 我將其包裝在 select 中,否則它將返回兩個字段,並且子查詢 ( WHERE Country IN
) 只需要一個參數傳遞給它。
這是你期待的結果嗎?
反映您對問題的最新編輯的版本,在 northwinds 示例數據庫中,使用 LIKE:
SELECT * FROM Customers WHERE Country IN (
SELECT Country FROM (
SELECT Country,
CASE WHEN Country LIKE 'Fr%' THEN 1
WHEN Country LIKE 'Ger%' THEN 2
ELSE 3 END
FROM Customers
WHERE (Country LIKE 'Fr%')
OR (Country LIKE 'Ger%')
OR (Country LIKE 'Au%')
ORDER BY 2 LIMIT 1
) z
)
這將在 mySQL(或 SQL 服務器下的托管代碼,或另一個支持 REGEX 的 rdms)中得到簡化:
SELECT * FROM Customers WHERE Country IN (
SELECT Country FROM (
SELECT Country,
CASE WHEN Country LIKE 'Fr%' THEN 1
WHEN Country LIKE 'Ger%' THEN 2
ELSE 3 END
FROM Customers
WHERE Country REGEXP '^(Fr|Ger|Au%)'
ORDER BY 2 LIMIT 1
) z
)
這個使用 REGEXP 的示例不適用於 w3schools 的 Northwinds 示例,我也沒有測試它,因為我必須導出數據庫才能這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.