繁体   English   中英

2个带有WHERE子句的表联接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM