SQL中CASE语法的思考过程



我有以下代码(我正在使用罗斯文数据库(,它给了我这张图片中显示的结果

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...

最新更新