Mysql 如果Count(*)=0,如何获取包含内容的记录
我有一套表格,以不同的格式包含员工成员的第二专长。事实上,只有少数初级专业允许一个人拥有次级专业 我提出了一个联合观点,以这种方式结合二级专业,效果很好:Mysql 如果Count(*)=0,如何获取包含内容的记录,mysql,sql,Mysql,Sql,我有一套表格,以不同的格式包含员工成员的第二专长。事实上,只有少数初级专业允许一个人拥有次级专业 我提出了一个联合观点,以这种方式结合二级专业,效果很好: 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.s
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等)没有辅助专业
我收到这样的东西
现在,我可以使用从创建的视图中获取数据,其中gr=:n
如何修改视图,以便使用WHERE gr=:n
(1、2、3等)子句从视图中获取数据时,将得到一条记录id=1=“未指定”gr=n
附加在社区评论上:
如果(10,11,20)中的:n存在于表中并由视图显示,则我需要获取所有记录。例如,图片中列出的3条记录的:n=20
。仅当:n不在(10,11,20)
中时,我需要一条从表(和视图)中缺席的附加(单个)记录。请注意,(10,11,20)
中带有gr的记录具有id=1
和speciality='notspecified'
应Jon Tofte Hansen的要求追加
这是一个未过滤的视图输出(没有WHERE
子句)
如果我使用获取视图,其中gr=20
我得到以下内容(这就是我想要的):
如果使用,其中gr=10
-此设置(这就是我想要的):
如果我使用获取它,其中gr=1
,那么我希望接收一条在用于创建视图的任何表中都不存在的单记录。我希望获得此输出,但不知道如何:
以下是表格的结构(如果可能有帮助):
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;
看起来你只是在问以下问题:
SELECT *
FROM viewname
WHERE speciality='Not specified' and gr=:n
这不是你想要的,有什么原因吗?你想要什么还不完全清楚,但可能就是这个原因。添加一个额外的联合,生成三个具有次要特性的表中不存在的所有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)
您可能需要一个聚合函数。但首先,让我们澄清一下。如果您选择gr=20,那么三条记录中的哪一条将是我们想要的一条记录?我们需要更多的选择标准。@dimm感谢您的关注。如果我选择gr=20,我需要获取数据集,其中包含图片中列出的3条记录。仅对于其他gr值(10、11和20除外),我需要从给定视图中提取一条缺席的记录。请显示示例数据、您得到的结果以及您期望的结果。您想要什么还不是很清楚。您需要显示包含主要特性的表,以及完整的视图文本,而不仅仅是明细表的并集。@JonTofte Hansen,请查看附加问题谢谢,Hogan。不,不幸的是,事实并非如此。如果gr在(10,11,20)中,我需要得到一个包含更多记录的数据集。仅对于其他值,我需要一条从视图中缺席的记录。请看我对问题的评论嗯。。。这对CTE来说很容易,但我不知道在mysql中最好的方法。那么我可以请你删除你的答案吗?我想零分答案可能会引起社区的注意。你可以提问,但我不会这么做。我利用了你的想法,添加了最后一个UNION ALL
:SELECT 1 AS
id,“notspecified”AS
speciality,tsl
id`ASgr
来自tsspecialities\u列表
tsl
其中(tsl
id
不在(10,11,20))`这给了我预期的结果。