запрос с использованием столбца IN ('one', 'two'), сгруппированного по pk и имеющего count (имя столбца) = 2, возвращает пустой - PullRequest
0 голосов
/ 25 апреля 2019

Использование 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"

Фактические результаты пусты, но не должны быть.

1 Ответ

1 голос
/ 25 апреля 2019

Вы группируете по id, который уникален, поэтому никогда не может быть два или более (разных) sw_name на id.

Поскольку asset_name является столбцом в списке для SELECT, я думаю, что вы действительно хотите сгруппировать по asset_name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...