繁体   English   中英

使用以pk分组并具有count(distinct column_name)= 2的column_name IN('one','two')的查询返回空

[英]query using column_name IN ('one','two') grouped by pk and having count (distinct column_name) = 2 returns empty

使用IN选择计算机必须匹配的软件名称的动态列表,并且数据库中存在一个已知值的数据,使用时的结果:

GROUP BY id
HAVING COUNT(DISTINCT column_name) = count_of_list_values;

当它应该返回期望值时,将返回一个空结果集。 注意它在您搜索单个列表项时有效,而该问题在于该列表扩展到多个列表项时。

大量的Google搜索,除了使用phpmyadmin之外,没有其他有用的结果,我一直在试图弄清为什么它失败了。

隔离看起来似乎令人窒息的区域,并尝试使用查询进行其他操作以使其正常工作。

这是我正在使用的查询部分。

SELECT
        am_software_archive.asset_name
    FROM
        am_software_archive
    WHERE
        LOWER(am_software_archive.sw_name) IN('nodejs', 'visio 2013')
    GROUP BY
        am_software_archive.id
    HAVING
        COUNT(
            DISTINCT am_software_archive.sw_name
        ) = 2

该表中的数据存在并且有效,因此应该可以使用...表定义

CREATE TABLE IF NOT EXISTS am_software_archive(
                    id BIGINT NOT NULL UNIQUE,
                    asset_name VARCHAR(10) NOT NULL,
                    sw_name VARCHAR(150) NOT NULL,
                    sw_developer BIGINT NOT NULL,
                    sw_key VARCHAR(50) DEFAULT NULL,
                    sw_osver VARCHAR(15) DEFAULT NULL,
                    CONSTRAINT PK_software PRIMARY KEY(id, asset_name),
                    INDEX idx_sw_name_asset(asset_name,sw_name),
                    INDEX idx_sw_key_asset_name(asset_name,sw_key),
                    INDEX idx_sw_name_sw_key(sw_name,sw_key),
                    INDEX idx_osver_sw_name(sw_name,sw_osver),
                    INDEX idx_osver_asset_name(asset_name,sw_osver)
                )

在我的数据库中,预期结果将是:“ ABX50269”

实际结果是空的,但不应该这样。

您按id分组,该id是唯一的,因此每个id不能有两个或多个(不同的) sw_name

由于asset_nameSELECT列表中的列,我认为您实际上是想按asset_name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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