我正在尝试搜索多列文字和备忘录,以查找我不想看到的某些短语和黑名单短语。
假设下表
stories:
id, title, author, publisher, content
实施例。我想找到所有提及(在任何领域)'苹果'但黑名单'苹果酱'的故事。
SELECT stories.id, [stories.title] & " " & [stories.author] & " " & [stories.publisher] & " " & [stories.memo] AS allMyText
FROM stories
WHERE ((([allMyText]) Like "*apples*" And ([allMyText]) Not Like "*applesauce*"));
如何在where子句中使用别名?我找不到关于这个主题的任何文件:
1)这种方法可行吗? 2)替代方法是否意味着我将在每次迭代时执行多个字符串连接?
答案 0 :(得分:4)
我不能在where子句中使用我的别名。
1.
这种方法可行吗?
当然,把它放在子查询中。
SELECT *
FROM
(
SELECT stories.id, [stories.title] & " " & [stories.author] & " " & [stories.publisher] & " " & [stories.memo] AS allMyText
FROM stories
) AS SUBQ
WHERE ((([allMyText]) Like "*apples*" And ([allMyText]) Not Like "*applesauce*"));
2.
这个替代方法是不是意味着我会在每次迭代中执行多个字符串连接?
是的,这是正确的,另一种方法是重复表达式。我不会厌倦这个替代方案的代码。
对于您的特定查询,您也可以使用此
SELECT stories.id, [stories.title] & " " & [stories.author] & " " & [stories.publisher] & " " & [stories.memo] AS allMyText
FROM stories
WHERE ([stories.title] Like "*apples*" OR [stories.author] Like "*apples*"
OR [stories.publisher] Like "*apples*" OR [stories.memo] Like "*apples*")
AND NOT ([stories.title] Like "*applesauce*" OR [stories.author] Like "*applesauce*"
OR [stories.publisher] Like "*applesauce*" OR [stories.memo] Like "*applesauce*")
答案 1 :(得分:3)
唯一的问题是,无论如何 我试图做什么,我不能使用我的别名 在where子句中。我找不到任何东西 有关该主题的文件
是的,Access / Jet / ACE'SQL'语言的文档严重缺乏,可用的少量文档存在令人震惊的错误。
以下是一些关于SQL的文档:
“Joe Celko在集合中的思考:SQL中的辅助,时间和虚拟表”,第12章,第235-237页:
以下是
SELECT
在SQL中的工作原理...... 从FROM
子句开始...转到WHERE
条款......转到 可选的GROUP BY
子句...转到 可选的HAVING
条款......转到SELECT
子句并构造 列表中的表达式。这意味着 那个标量子查询,功能SELECT
中的调用和表达式 在所有其他条款之后完成 完成。AS
运算符也可以 给表达式命名SELECT list
。这些新名字来了 一下子就存在,但之后WHERE
子句GROUP BY
子句 和HAVING
条款 执行;你不能在它中使用它们SELECT
列表或WHERE
子句 出于这个原因。
我认为这解释了为什么你不能在Access(Jet,ACE,等等)的as clause
子句中使用WHERE
(“列别名”)。
也就是说,请注意Access不符合SQL,因为它允许您在左右方向的as clause
子句中使用SELECT
,例如这在Access SQL中是合法的(但在标准SQL中是非法的):
SELECT 2 AS a, 2 AS b, a + b AS c
FROM tblMyTable
答案 2 :(得分:1)
使用子查询:
Select id,allMyText
from
(SELECT stories.id,
[stories.title] & " " & [stories.author] & " "
& [stories.publisher] & " " & [stories.memo] AS allMyText
FROM stories ) as w
WHERE ((([allMyText]) Like "*apples*" And ([allMyText]) Not Like "*applesauce*"))