SQL中CASE语法的思考过程

Thought process of CASE syntax in SQL

我有以下代码(我使用的是 northwind 数据库),它给出了 picture

中显示的结果
SELECT a.FirstName, a.TitleOfCourtesy, a.Notes, c.CustomerYear
FROM employees a
    INNER JOIN orders b
    ON a.EmployeeID = b.EmployeeID
    LEFT JOIN customers c
    ON b.CustomerID = c.CustomerID
WHERE a.TitleOfCourtesy = 'Ms.';

上面的代码组合了三个表并只选择了 a.TitleOfCourtesy = 'Ms.'

的行

根据结果,我想在 a.Notes 列中取出 %1992% 的行,并且只显示 c.CustomerYear 等于 1992 的行。所以在前面的图片中我应该只显示第二行。

我以为我可以使用 CASE + WHEN 语法来创建一种 IF 语句,但我只在 CASE 行中使用了无效的语法。 CASE 部分应该移到 WHERE 部分之后还是我完全错误地使用它?

SELECT a.FirstName, a.TitleOfCourtesy, a.Notes, c.CustomerYear

CASE 
    WHEN a.Notes LIKE '%1992%' THEN c.CustomerYear LIKE '1992' 
    ELSE NULL END 

FROM employees a
    INNER JOIN orders b
    ON a.EmployeeID = b.EmployeeID
    LEFT JOIN customers c
    ON b.CustomerID = c.CustomerID
WHERE a.TitleOfCourtesy = 'Ms.';

我应该如何思考才能达到我想要的结果?

您只需扩展 WHERE 子句...

SELECT a.FirstName, a.TitleOfCourtesy, a.Notes, c.CustomerYear
FROM employees a
    INNER JOIN orders b
    ON a.EmployeeID = b.EmployeeID
    LEFT JOIN customers c
    ON b.CustomerID = c.CustomerID
WHERE a.TitleOfCourtesy = 'Ms.'
  AND a.Notes LIKE '%1992%'
  AND c.CustomerYear LIKE '1992';

我在你的图像中也只看到 一个 匹配行,而不是两个。所以我可能误解了你想要实现的目标......也许你想要它得到两行?

SELECT a.FirstName, a.TitleOfCourtesy, a.Notes, c.CustomerYear
FROM employees a
    INNER JOIN orders b
    ON a.EmployeeID = b.EmployeeID
    LEFT JOIN customers c
    ON b.CustomerID = c.CustomerID
WHERE a.TitleOfCourtesy = 'Ms.'
  AND a.Notes LIKE '%1992%'
  AND (c.CustomerYear LIKE '1992' OR c.CustomerYear IS NULL)

最后,你不需要LIKE '1992'你可以只使用= '1992',如果值是一个整数只使用= 1992...