【发布时间】:2020-11-07 11:15:33
【问题描述】:
谁能告诉我这里的语法哪里出错了?
我有这个返回 26 行的查询
SELECT firstname, lastname
FROM author
WHERE authorid IN (
SELECT authorid
FROM written_by
JOIN book ON written_by.bookdescid = book.bookdescid
WHERE UPPER (book.title) LIKE UPPER ('%electric%')
AND NOT UPPER (written_by.role) LIKE UPPER('%translator%'));
这似乎是正确的,我使用 UPPER 和 ('%example%') 这样的原因是为了改变大小写。
但是,当我尝试添加到查询中以获取书的副标题还包含“电”的位置时,由于返回的行数较少,我不知怎么弄错了语法?如果有的话,它应该是相同的或更多的......我尝试了一些变化,但下面的这个是我认为可行的......
SELECT firstname, lastname
FROM author
WHERE authorid IN (
SELECT authorid
FROM written_by
JOIN book ON written_by.bookdescid = book.bookdescid
WHERE UPPER (book.title) OR (book.subtitle) LIKE UPPER ('%electric%')
AND NOT UPPER (written_by.role) LIKE UPPER('%translator%'));
【问题讨论】:
-
您认为这有什么作用以及为什么?如果您尝试根据(权威)文档(或者,作为初学者,甚至是介绍)来证明您的期望是合理的,您会发现您做不到。人们应该始终阅读手册以了解正在使用的功能。 OR 需要 2 个条件,优先级低于 LIKE。 PS 对于代码问题,需要minimal reproducible example。其中包括有理由的期望。还有像
select * from t where x or y like 'A'这样的问题的最小代码会显示问题是OR vs LIKE。或 OR vs = 更小。