Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果Count(*)=0,如何获取包含内容的记录_Mysql_Sql - Fatal编程技术网

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`AS
gr
来自
tsspecialities\u列表
tsl
其中(
tsl
id
不在(10,11,20))`这给了我预期的结果。