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
...
我有以下代码(我使用的是 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
...