#mysql
#mysql
Вопрос:
Я уверен, что вопрос сформулирован ужасно, но я не мог придумать лучшего способа его сформулировать. Вот идея, предположим, у меня есть таблица, которая выглядит следующим образом:
id, status, orgId
123, green, 1
234, green, 1
345, blue, 1
456, blue, 2
567, blue, 2
789, red, 3
890, green, 3
Я ищу, чтобы получить список всех идентификаторов OrgID, где статусы всех идентификаторов для OrgID выделены синим цветом. Учитывая эти критерии, этот запрос приведет к «2» с учетом приведенной выше таблицы.
Простите меня, если это что-то довольно простое, но мои глубокие знания SQL довольно поверхностны. Спасибо!
Ответ №1:
В принципе, вы захотите использовать distinct, потому что вы ищете только один из каждого ответа, и вам нужно иметь WHERE
предложение, которое получает только там, где статус синий.
SELECT
find.id
FROM (
SELECT
DISTINCT(orgId) AS id
FROM
my_table item
WHERE
item.status = 'blue') find
WHERE
NOT EXISTS (
SELECT
*
FROM
my_table verify
WHERE
verify.orgId = find.id
AND
verify.status != 'blue')
Комментарии:
1. Привет, Кайл, спасибо за помощь! Я думаю, что это направляет меня в правильном направлении, но, похоже, может отсутствовать часть. Этот запрос вернет 1 и 2. Я ищу запрос, который возвращал бы только 2 с учетом приведенной выше таблицы. (Только OrgID, для всех идентификаторов которых установлено значение ‘blue’)
2. Вау! Спасибо, Кайл, я ценю это. Мне потребовалось бы довольно много времени, чтобы разобраться с этим самостоятельно. Очень рад, спасибо. Хотел бы я поддержать вас, но, к сожалению, я здесь слишком новичок. : (
3. Рад помочь. Удачи в будущих начинаниях!