[英]2 Table Joins with WHERE clause
我正在使用Mysql,但在尝试从SELECT查询中获取结果时遇到了困难。 我有2张桌子。 第一表硬件,第二表软件s_name_cache:
desc hardware;
+----------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| DEVICEID | varchar(255) | NO | PRI | NULL | |
| NAME | varchar(255) | YES | MUL | NULL | |
| WORKGROUP | varchar(255) | YES | MUL | NULL | |
| USERDOMAIN | varchar(255) | YES | | NULL | |
| OSNAME | varchar(255) | YES | MUL | NULL | |
| OSVERSION | varchar(255) | YES | | NULL | |
| OSCOMMENTS | varchar(255) | YES | | NULL | |
| PROCESSORT | varchar(255) | YES | | NULL | |
| PROCESSORS | int(11) | YES | | 0 | |
| PROCESSORN | smallint(6) | YES | | NULL | |
| MEMORY | int(11) | YES | MUL | NULL | |
| SWAP | int(11) | YES | | NULL | |
+----------------+---------------------+------+-----+---------+----------------+
desc softwares_name_cache;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| NAME | varchar(255) | YES | UNI | NULL | |
+-------+--------------+------+-----+---------+----------------+
我正在尝试获取每个SQL Server的处理器数(sum(hardware.PROCESSORN)
,因此我需要从表硬件和(softwares_name_cache where name like '%Microsoft SQL Server 20%')
(OSNAME LIKE '%Server%')
加入(OSNAME LIKE '%Server%')
条件, (softwares_name_cache where name like '%Microsoft SQL Server 20%')
表softwares_name_cache中的(softwares_name_cache where name like '%Microsoft SQL Server 20%')
条件。
由于字段“名称”对于硬件和softwares_name_cache表都是通用的。 在您的where条件中,您将使用Name filed进行过滤。 因此,它将引发错误。 尝试这样:
SELECT sum(hardware.PROCESSORN)
FROM hardware
inner join softwares_name_cache on hardware.id = softwares_name_cache.ID
WHERE (OSNAME LIKE '%Server%') AND softwares_name_cache.NAME IN IN (select NAME from
softwares_name_cache where name like '%Microsoft SQL Server 20%');
SELECT sum(hardware.PROCESSORN)
FROM hardware
inner join softwares_name_cache on hardware.ID= softwares_name_cache.ID
WHERE (OSNAME LIKE '%Server%')
AND softwares_name_cache.NAME IN
(
select softwares_name_cache.NAME
from softwares_name_cache
where softwares_name_cache.NAME like '%Microsoft SQL Server 20%'
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.