Mysql
 sql >> база данни >  >> RDS >> Mysql

mysql присъедини таблица заявка 2 стойности

Има много начини за решаване на това; най-простото вероятно би било да използвате няколко exists клаузи или се присъединете към attributes таблица два пъти, но можете да използвате и group by и having клаузи за постигане на същия резултат:

-- option 1: using multiple exists clauses
select p.id, p.productname
from Products p
where exists (select 1 from Attributes a where p.ID = a.ProductID and a.AttributeID = 3)
  and exists (select 1 from Attributes a where p.ID = a.ProductID and a.AttributeID = 4);

-- option 2: using multiple joins
select p.id, p.productname
from Products p
join Attributes a3 on p.ID = a3.ProductID
join Attributes a4 on p.ID = a4.ProductID
where a3.AttributeID = 3
  and a4.AttributeID = 4;

-- option 3: using aggregate and having
select p.id, p.productname
from Products p
join Attributes a on p.ID = a.ProductID
group by p.id, p.productname
having sum(case when a.AttributeID = 3 then 1 else 0 end) > 0
   and sum(case when a.AttributeID = 4 then 1 else 0 end) > 0;

-- option 4: using having and count
select p.id, p.productname
from Products p
join Attributes a on p.ID = a.ProductID
where a.AttributeID in (3,4)
group by p.id, p.productname
having count(distinct a.attributeid) = 2;

Кой начин е най-подходящ за вас вероятно ще зависи от резултата, от който се нуждаете, и от индексите и т.н.

Примерна SQL Fiddle.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql - PDO грешка - Невалидно име на каталог:1046 Няма избрана база данни

  2. MySQL INNER JOIN избира само един ред от втората таблица

  3. Как да актуализирам таблица, за да добавя първичен ключ и да актуализирам всички съществуващи редове с увеличени идентификатори?

  4. Doctrine DBAL setParameter() със стойност на масива

  5. Заявката за актуализиране на Mysql с подготвено изявление дава грешка