Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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查询将在一列中只返回不同的值?_Mysql - Fatal编程技术网

Mysql 什么SQL查询将在一列中只返回不同的值?

Mysql 什么SQL查询将在一列中只返回不同的值?,mysql,Mysql,可能重复: 我知道以前有人问过这个问题,但我还没有找到任何适合我的情况的解决方案。典型的SQL语句如下所示: SELECT Hostname,Site,Rack FROM hardwaredb WHERE Hostname LIKE '%$hostval%' SELECT Hostname,Site,Rack FROM hardwaredb WHERE Hostname LIKE '%OldGlory117%' $hostval是一个powershell变量,将替换为系统名称。因此,如果我

可能重复:

我知道以前有人问过这个问题,但我还没有找到任何适合我的情况的解决方案。典型的SQL语句如下所示:

SELECT Hostname,Site,Rack FROM hardwaredb WHERE Hostname LIKE '%$hostval%'
SELECT Hostname,Site,Rack FROM hardwaredb WHERE Hostname LIKE '%OldGlory117%'
$hostval是一个powershell变量,将替换为系统名称。因此,如果我有一个名为OldGlory117的系统,则语句如下所示:

SELECT Hostname,Site,Rack FROM hardwaredb WHERE Hostname LIKE '%$hostval%'
SELECT Hostname,Site,Rack FROM hardwaredb WHERE Hostname LIKE '%OldGlory117%'
由于其他列的原因,某些行是重复的,并且数据库中存在重复的主机名。因此,上述查询可能会返回:

OldGlory117    USA    Rack1
OldGlory117    USA    Rack1
OldGlory117    USA    Rack1
当我不寻找导致重复的列时,这是有问题的。有没有办法只返回具有唯一主机名值的行?如果我没有在WHERE语句中指定主机名怎么办?例:

SELECT Hostname,Site,Rack FROM hardwaredb WHERE Rack LIKE '%Rack1%'

谢谢

您可以使用分组方式吗

SELECT Hostname,Site,Rack FROM hardwaredb WHERE Rack LIKE '%Rack1%' GROUP BY Hostname

您可以使用分组方式吗

SELECT Hostname,Site,Rack FROM hardwaredb WHERE Rack LIKE '%Rack1%' GROUP BY Hostname
试试这个:

SELECT Hostname,Site,Rack FROM hardwaredb WHERE Rack LIKE '%Rack1%' having count(Hostname)=1 GROUP BY Hostname,Site,Rack
编辑: having子句将帮助您在group by子句上设置条件

SELECT Hostname,Site,Rack FROM hardwaredb WHERE Rack LIKE '%Rack1%' having count(Hostname)=1 GROUP BY Hostname,Site,Rack
编辑:
having子句将帮助您对group by子句设置条件。以下代码将为您完成此工作:

SELECT Hostname,Site,Rack FROM hardwaredb WHERE Hostname LIKE '%$hostval%'
GROUP BY Hostname, Site, Rack

您还可以尝试使用
SELECT DISTINCT
关键字短语,尽管如果您以前没有使用过它,它可能会产生意外的结果…

以下代码将为您完成此任务:

SELECT Hostname,Site,Rack FROM hardwaredb WHERE Hostname LIKE '%$hostval%'
GROUP BY Hostname, Site, Rack

您还可以尝试使用
选择DISTINCT
关键字短语,尽管如果您以前没有使用过它,它可能会产生意外的结果…

据我所知,使用DISTINCT后,您可以实现自己的目标(只要三列在示例数据中都是不同的,就可以工作)

如果站点和机架中的值不同,则您可以使用:

SELECT  DISTINCT Hostname
FROM    hardwaredb 
WHERE   Rack LIKE '%Rack1%'
最后,如果站点和机架中的值不同,但您需要可以使用的每个列的值(Order by很重要,否则查询将变得不确定,并且在查询相同数据时可能产生不同的结果):


但是,我个人不喜欢这个解决方案,它在大多数DBMS中都不起作用,并且打破了ANSI标准,即在选择列表中包含不依赖于group by中的项目的列。虽然很难发布替代方案,但不了解您的确切要求。

据我所知,您可以在使用DISTINCT(只要样本数据中的所有三列都是不同的)后实现您的目标

如果站点和机架中的值不同,则您可以使用:

SELECT  DISTINCT Hostname
FROM    hardwaredb 
WHERE   Rack LIKE '%Rack1%'
最后,如果站点和机架中的值不同,但您需要可以使用的每个列的值(Order by很重要,否则查询将变得不确定,并且在查询相同数据时可能产生不同的结果):


但是,我个人不喜欢这个解决方案,它在大多数DBMS中都不起作用,并且打破了ANSI标准,即在选择列表中包含不依赖于group by中的项目的列。虽然很难发布替代方案,但不了解您的确切需求。

为什么同时使用sql server和mysql标记此项?为什么使用powershell标记此项是一个更好的问题。这是纯sql。为什么用sql server和mysql来标记它?为什么用powershell来标记它是一个更好的问题。这是纯sql。这很有效,谢谢。现在唯一的问题是我是否要返回所有字段。例如:“从硬件数据库中选择*,其中主机名类似“%$hostval%”。有没有可能将GROUP BY与这样的语句一起使用?绝对有可能!只要把你的字段改成a*就行了:)谢谢。现在唯一的问题是我是否要返回所有字段。例如:“从硬件数据库中选择*,其中主机名类似“%$hostval%”。有没有可能将GROUP BY与这样的语句一起使用?绝对有可能!只需将字段更改为a*即可:)