Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

truy vấn bảng tham gia mysql 2 giá trị

Có nhiều cách để giải quyết vấn đề này; đơn giản nhất có lẽ sẽ là sử dụng một vài exists mệnh đề hoặc nối các thuộc tính attributes bảng hai lần, nhưng bạn cũng có thể sử dụng nhóm group byhaving các mệnh đề để đạt được cùng một kết quả:

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

Cách nào là tốt nhất cho bạn có lẽ sẽ phụ thuộc vào kết quả bạn cần và lập chỉ mục.

Fiddle SQL mẫu.




  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_exceptions.OperationalError:(1045, Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost' (sử dụng mật khẩu:CÓ))

  2. Truy vấn khoảng ngày trong SQL

  3. php:phiên so với cơ sở dữ liệu

  4. LoadError khi cố gắng sử dụng MySQL với Ruby on Rails trong Windows, RubyMine IDE

  5. Nhiều khóa ngoại loại trừ lẫn nhau - đây có phải là cách để thực hiện?