Mysql 选择具有回退到基本项的查询

Mysql 选择具有回退到基本项的查询,mysql,select,Mysql,Select,我确信有办法做到这一点,但我不知道如何做到 我有一个项目表,分类如下: table items ( item_name id_category ) - item list - "Item one", 1 "Item two", 2 "Item three", 3 table service ( service_name exclusive id_category ) - service list - "Basic service", 0, null "A

我确信有办法做到这一点,但我不知道如何做到

我有一个项目表,分类如下:

table items
(
    item_name
    id_category
)
- item list -
"Item one", 1
"Item two", 2
"Item three", 3

table service
(
    service_name
    exclusive
    id_category
)
- service list -
"Basic service", 0, null
"Advanced service", 1, null
"Super service", 1, 2
我需要在服务表上进行选择,以查找特定于给定项目的服务。 它应该总是返回一个非排他性和非特定类别的服务。 它还应仅返回与其类别相关的独占服务,或者当id_类别为空时返回

因此,对“Item one”的查询应该返回

Basic Service
Advanced Service
Basic Service
Super Service
“第二项”应返回

Basic Service
Advanced Service
Basic Service
Super Service
有人能帮我吗?

你需要一个工会

(SELECT `service_name` FROM `service` WHERE `exclusive`='0')
UNION
(SELECT IFNULL(`service`.`service_name`,(SELECT `service_name` FROM `service` WHERE `exclusive`='0' AND `id_category` IS NULL)) FROM `items` LEFT JOIN `service` ON `items`.`id_category`=`service`.`id_category` WHERE `items`.`name`='Item one')

第二个查询的WHERE子句可能不同。我假设您是按项目名称搜索的

此网站是为了帮助您完成任务,而不是为您做事。@EH_watch-您的评论完全没有帮助!这个问题提供了一个非常简单的版本,我正在尝试做什么。到目前为止,我尝试的SELECT语句只能返回所有服务列表或不正确的列表。因此,我的问题是……您是否尝试过解码或案例声明?嗨@Randy,是的,我在声明中尝试过案例,但无法使其正常工作。您确定OP不需要一个
联合所有人
?谢谢您的建议,只需尝试一下,我就可以获得特定类别和非特定类别的服务。我需要的是,如果找不到类别,它会“退回”到非特定类别。我刚刚看到了这一点。我认为左连接和ifnull可能会得到您所需要的。我会编辑答案的。谢谢你,乔恩。我知道你要做什么了,非常感谢你的帮助。你可以想象,这并不是我需要得到的全部。事实上,查询的表包含许多我需要返回的字段,而不是一个字段。我不知道如何用这个输出字段列表。@JonHulka这两者之间有性能差异
UNION
尝试删除重复项,因此需要更多的时间,其中
UNION ALL
将简单地堆叠这两个集合。