Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 SQL查询返回2个返回值,其中应返回1个_Mysql_Join_Left Join_Conditional Statements - Fatal编程技术网

Mysql SQL查询返回2个返回值,其中应返回1个

Mysql SQL查询返回2个返回值,其中应返回1个,mysql,join,left-join,conditional-statements,Mysql,Join,Left Join,Conditional Statements,我遇到了以下问题: 我有两张桌子: bestia_assets bestia_servers_specifications 在我的资产中,有很多关于用户使用的服务器的信息。例如: - User: 1 - Asset: example.com - User: 1 - Asset: example.org 保存在资产表中 在servers表中,我存储有关服务器本身的信息 比如: 等等 现在我想获取所有使用ID为33的服务器的用户 我的第一次尝试: SELECT * FROM (SELECT a.

我遇到了以下问题:

我有两张桌子:

bestia_assets
bestia_servers_specifications
在我的资产中,有很多关于用户使用的服务器的信息。例如:

- User: 1 - Asset: example.com
- User: 1 - Asset: example.org
保存在资产表中

在servers表中,我存储有关服务器本身的信息

比如:

等等

现在我想获取所有使用ID为33的服务器的用户

我的第一次尝试:

SELECT * FROM (SELECT a.userid, s.serverid
FROM  bestia_servers_specifications as s
LEFT JOIN bestia_assets as a
ON a.asset = s.value) as servers
WHERE servers.serverid = 33
GROUP BY servers.userid
但这给了我两个条目:

1: userid NULL serverid 33
2: userid 1 serverid 33
所以这对我来说是不可用的。如何获取使用连接到服务器且具有
serverid 33
的资产的用户

这是表
bestia\u服务器\u规范的创建

CREATE TABLE `bestia_servers_specifications ` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `serverid` int(10) DEFAULT NULL,
    `type` varchar(250) NOT NULL DEFAULT '',        
    `value` varchar(250) NOT NULL DEFAULT '',       
    PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
这是表
bestia_assets
的创建:

CREATE TABLE `bestia_assets ` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `userid` int(10) DEFAULT NULL,
    `type` varchar(250) NOT NULL DEFAULT '',        
    `asset` text,
    PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
这是资产表的内容:

在服务器表中有许多关于不同服务器的信息,如下所示:

获得两行的原因是您使用的是左联接,该联接与类型为'ip4'的行的任何内容都不匹配,这将为用户ID提供空值

解决方案是限制连接到“fqdn”的类型,因为表之间的关系似乎是asset=fqdn值

请尝试以下方法:

SELECT a.userid, s.serverid
FROM bestia_servers_specifications as s
LEFT JOIN bestia_assets as a
ON a.asset = s.value
WHERE s.serverid = 33 AND s.type = 'fqdn'

使用
left join
将获得那些在资产表中没有匹配项的服务器-如果您只想要有匹配项的服务器,只需省略
left
关键字。

您是否可以更新问题以包括两个表(列、键)的规格?很难说它们是如何设计的以及它们之间的关系。嗨,jpw,我在我的帖子中添加了更多的信息。我希望它能清楚地了解我想要什么:-)简而言之:我想让使用资产的用户(通过assettable.asset=servertable.value)链接到特定的服务器(例如ID为33的服务器)
SELECT a.userid, s.serverid
FROM bestia_servers_specifications as s
LEFT JOIN bestia_assets as a
ON a.asset = s.value
WHERE s.serverid = 33 AND s.type = 'fqdn'