我有以下代码(我正在使用罗斯文数据库(,它给了我这张图片中显示的结果
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
...