如何解决使用 UNION 和 <condition> 选择以 A 到 K 开头的名称
我正在解决挑战。有2张表:
Fruit
列 FriutID
和 Name
表 Vegetables
与列 VegetableID
和 Name
我需要输出以字母 A 到 K 开头的所有水果和蔬菜的列表。换句话说,所有不以字母 L 到 Z 开头的水果和蔬菜。
我正在使用 UNION
,但我不知道如何使用 LIKE "selection criteria"
select Name from fruit where Name LIKE BETWEEN "A%" AND "K%"
UNION
select Name from vegetable where Name LIKE BETWEEN "A%" AND "K%";
我的第二次尝试:
select Name from fruit where Name LIKE "A%" AND LIKE "B%" AND LIKE "C%" AND LIKE "D%" AND LIKE "E%" AND LIKE "F%" AND LIKE "G%"
AND LIKE "H%" AND LIKE "I%" AND LIKE "J%" AND LIKE "K%"
UNION
select Name from vegetable where Name LIKE "A%" AND LIKE "B%" AND LIKE "C%" AND LIKE "D%" AND LIKE "E%" AND LIKE "F%" AND LIKE "G%"
AND LIKE "H%" AND LIKE "I%" AND LIKE "J%" AND LIKE "K%";
返回语法错误:SQL Error: near ""B%"": syntax error
请提出一个解决方案来解决这个问题, 亲切的问候, 安娜
解决方法
您已经接近第二次尝试了。但是您需要使用 OR
- 名称可以同时以一个字母开头,也可以以另一个字母开头。并且您需要使用完整的 LIKE
操作——您不能将第一个操作数用于超过一个第二个操作数。
SELECT name
FROM fruit
WHERE name LIKE 'A%'
OR name LIKE 'B%'
...
OR name LIKE 'J%';
OR name LIKE 'K%'
UNION
SELECT name
FROM vegetable
WHERE name LIKE 'A%'
OR name LIKE 'B%'
...
OR name LIKE 'J%';
OR name LIKE 'K%';
另请注意,UNION
会消除重复项。如果您不需要或不想要它,请改用 UNION ALL
。
不能与运算符LIKE
一起使用的BETWEEN
,使用SUBSTR()
获取每个Name
的第一个字母并检查它是否介于'A'
和 'K'
:
SELECT Name FROM fruit WHERE UPPER(SUBSTR(Name,1,1)) BETWEEN 'A' AND 'K'
UNION ALL
SELECT Name FROM vegetable WHERE UPPER(SUBSTR(Name,1)) BETWEEN 'A' AND 'K';
或使用 GLOB
运算符:
SELECT Name FROM fruit WHERE Name GLOB '[A-Ka-k]*'
UNION ALL
SELECT Name FROM vegetable WHERE Name GLOB '[A-Ka-k]*';
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。