SQL запрашивает несколько условий для столбца (в одной таблице)

#mysql #sql #join

#mysql #sql #Присоединиться

Вопрос:

У меня следующий вопрос, и вот пример для лучшего понимания.

Предположим, у меня есть таблица, подобная этой:

введите описание изображения здесь

Я хочу получить различные идентификаторы (не нули), которые имеют спецификацию 2, и у них нет спецификации 5 из столбца спецификации.

Ожидаемый результат будет примерно таким:

Ожидаемый результат:

введите описание изображения здесь

Это что-то вроде соединения по левому краю? К сожалению, я не получаю желаемого результата с помощью своих запросов.

Комментарии:

1. У вас есть какая-либо родительская таблица? потому что это похоже на дочернюю таблицу (идентификатор Cam повторяется). Если у вас есть какая-либо родительская таблица, то результат запроса может быть извлечен из внутреннего соединения

Ответ №1:

 SELECT Cam_ID 
FROM source_table
WHERE Cam_ID IS NOT NULL -- if Cam_ID cannot be zero then simply 
                         -- WHERE Cam_ID
GROUP BY Cam_ID
HAVING  SUM(Specs = 'Specs 2') -- at least one 'Specs 2'
   AND !SUM(Specs = 'Specs 5') -- and none 'Specs 5'
  

Ответ №2:

использование существует и не существует

 select camid from table_name t1
where not exists ( select 1 from table_name t2 where t1.camid=t2.camid
                   and Specs= 'Spec 5')
 and exists ( select 1 from table_name t2 where t1.camid=t2.camid 
                                   and Specs= 'Spec 2')
  

Ответ №3:

Попробуйте этот приведенный ниже сценарий-

 SELECT DISTINCT Cam_ID 
FROM your_table
WHERE Cam_ID NOT IN
(
    SELECT DISTINCT Cam_ID 
    FROM your_table
    WHERE Specs = 'Specs 5'
)
AND Specs = 'Specs 2'
AND Cam_ID IS NOT NULL
  

Ответ №4:

Приведенный ниже SQL-скрипт должен выдать вам требуемый результат.

 SELECT CamId FROM (
SELECT t.CamId,
STUFF((
SELECT  ','   Specs FROM
(SELECT t1.Specs FROM test_table as t1 
WHERE t1.CamId = t.CamId) AS T 
FOR XML PATH('')
),1,1,'') AS specs
FROM test_table AS t
WHERE CamId IS NOT NULL
GROUP BY CamId) AS t5
where t5.specs LIKE '%Specs 2%'
AND t5.specs NOT LIKE '%Specs 5%'
  

Ответ №5:

 SELECT Cam_Id 
FROM table_one t1 
WHERE
    NOT EXISTS ( SELECT 1 FROM table_one t2 WHERE t1.Cam_Id = t2.Cam_Id AND Specs = 'Spec 5' ) 
    AND EXISTS ( SELECT 1 FROM table_one t2 WHERE t1.Cam_Id = t2.Cam_Id AND Specs = 'Spec 2' ) 
GROUP BY Cam_Id