使用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”
实际结果是空的,但不应该是空的。
答案 0 :(得分:1)
您按id
分组,这是唯一的,因此每个sw_name
不可能有两个或更多(不同的)id
。
由于asset_name
是SELECT
列表中的列,我认为您实际上是想按asset_name
分组。