Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mysql bergabung dengan tabel kueri 2 nilai

Ada banyak cara untuk mengatasi ini; yang paling mudah mungkin adalah menggunakan beberapa exists klausa, atau bergabung dengan attributes tabel dua kali, tetapi Anda juga dapat menggunakan group by dan having klausa untuk mencapai hasil yang sama:

-- 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;

Cara mana yang terbaik untuk Anda mungkin akan bergantung pada hasil yang Anda butuhkan dan indeks, dan lain-lain.

Contoh 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. Bagaimana saya bisa membuat kueri SUM MySQL mengembalikan nol alih-alih nol jika tidak ada catatan?

  2. Sql query mengikat variabel vs menentukannya

  3. Ambil semua berita dan semua komentar

  4. MYSQL TANGGAL RANGE dan RANGE WAKTU

  5. Cara Mengurangi waktu tanggal saat ini dari waktu tanggal dalam database - PHP