gpt4 book ai didi

mysql - 如果 Count(*)=0,如何获取包含某些内容的记录

转载 作者:行者123 更新时间:2023-11-29 21:53:54 26 4
gpt4 key购买 nike

我有一组表格,其中包含不同格式的员工的次要专业。事实上,只有少数主要特长可以让一个人拥有次要特长。

我创建了一个 UNION View ,以这种方式组合次要专业,并且工作正常:

SELECT tpl.id, tpl.speciality, 20 as gr FROM tpath_list tpl
UNION ALL
SELECT tlt.id, tlt.lab_type as speciality, 11 as gr FROM tlab_types tlt
UNION ALL
SELECT til.id, til.speciality, 10 as gr FROM tinstrumental_list til

字段gr包含主要专业(10、11和20)的索引字段,允许拥有次要专业。所有其他专业(ID 1、2、3 等)没有次要专业。

我收到这样的东西...

enter image description here

我现在可以使用 WHERE gr=:n 从创建的 View 中获取数据。

如何修改 View ,以便使用 WHERE gr=:n (1、2、3 等)子句从中获取数据将为我提供一条记录 id=1 Speciality="未指定"gr=n

附加在社区评论中:

如果:n IN(10,11,20),我需要获取表中存在并由 View 呈现的所有记录。例如,图中 :n=20 列出了 3 条记录。仅当 :n NOT IN(10,11,20) 我需要表(和 View )中缺少的附加(单个)记录。请注意,带有 gr IN(10,11,20) 的记录具有 id=1speciality='Notspecified'

应 Jon Tofte-Hansen 的要求附加

这是一个未过滤的 View 输出(没有 WHERE 子句)。

enter image description here

如果我使用 WHERE gr=20 获取 View ,我会得到以下内容(这就是我想要的):

enter image description here

如果使用 WHERE gr=10 - 这组(这就是我想要的):

enter image description here

如果我使用 WHERE gr=1 获取它,那么我希望收到用于创建 View 的任何表中都不存在的单个记录。我希望获得此输出,但不知道如何:

enter image description here

以下是表格的结构(如果有帮助的话):

DROP TABLE IF EXISTS `tspecialities_list`;
CREATE TABLE `tspecialities_list` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`speciality` varchar(30) NOT NULL DEFAULT '',
PRIMARY KEY (`id`,`speciality`),
KEY `i_by_speciality` (`speciality`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `tlab_types`;
CREATE TABLE `tlab_types` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`lab_type` varchar(255) DEFAULT NULL,
`deleted` smallint(5) unsigned DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `tpath_list`;
CREATE TABLE `tpath_list` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`speciality` varchar(30) NOT NULL DEFAULT '',
PRIMARY KEY (`id`,`speciality`),
KEY `i_by_speciality` (`speciality`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `tinstrumental_list`;
CREATE TABLE `tinstrumental_list` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`speciality` varchar(30) NOT NULL DEFAULT '',
PRIMARY KEY (`id`,`speciality`),
KEY `i_by_speciality` (`speciality`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

最佳答案

尚不完全清楚您想要什么,但可能就是这样。添加一个额外的联合,生成具有次要特性的三个表中不存在的所有 id:

 SELECT tpl.id, tpl.speciality, 20 as gr FROM tpath_list tpl
UNION ALL
SELECT tlt.id, tlt.lab_type as speciality, 11 as gr FROM tlab_types tlt
UNION ALL
SELECT til.id, til.speciality, 10 as gr FROM tinstrumental_list til

UNION ALL
select tsl.id, 'Not specified', tsl.id as gr from tspecialities_list tsl
where tsl.id not in
(SELECT tpl.id FROM tpath_list tpl
UNION
SELECT tlt.id FROM tlab_types tlt
UNION
SELECT til.id FROM tinstrumental_list til)

关于mysql - 如果 Count(*)=0,如何获取包含某些内容的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33369100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com