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

SQL để trả về một tập hợp kết quả đã hợp nhất

Điều này có thể được thực hiện với phép chia quan hệ :

select r.order_id from (
  select 
    dividend.*  
  from your_table_or_query as dividend  -- assumes no duplicates in `dividend`; use `distinct` if there are any
  inner join divisor
  on dividend.value = divisor.value
) as r
group by r.order_id
having count(*) = (select count(*) from divisor);

kết quả:

+----------+
| order_id |
+----------+
|     1236 |
|     1239 |
+----------+
2 rows in set (0.00 sec)

nơi truy vấn của bạn là your_table_or_query

select 260 as value from dual union select 264 as value from dual

divisor .

Thao tác này sẽ trả về id đơn hàng 1236 và 1239; sau đó chúng có thể là join ed sang truy vấn ban đầu để nhận tất cả các hàng có id đơn hàng đó nếu đó là những gì bạn muốn.

Truy vấn đầy đủ cùng với câu lệnh chèn:

create table divisor (value int);
insert into divisor values (260), (264);

create table your_table_or_query (value int, order_id int);
insert into your_table_or_query values (260, 1234), (260, 1235), (260, 1236), (264, 1236), (260, 1237), (260, 1238), (260, 1239), (264, 1239), (264, 1240), (260, 1241);


select y.* from (
  select r.order_id from (
    select
      dividend.*
    from your_table_or_query as dividend
    inner join divisor
      on dividend.value = divisor.value
  ) as r 
  group by r.order_id
  having count(*) = (select count(*) from divisor)
) as quotient
inner join your_table_or_query y
  on quotient.order_id = y.order_id;

Kết quả:

+-------+----------+
| value | order_id |
+-------+----------+
|   260 |     1236 |
|   264 |     1236 |
|   260 |     1239 |
|   264 |     1239 |
+-------+----------+
4 rows in set (0.00 sec)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SocketException:Không có máy chủ nào như vậy được biết đến

  2. Xảy ra lỗi khi truy cập EntityManager - openjpa - WAS liberty profile

  3. Đọc tệp văn bản và chuyển nội dung sang cơ sở dữ liệu mysql

  4. Cách thoát các ký tự đặc biệt mysql bằng sockets.io/node.js/javascript

  5. Khi sử dụng ini_set ('max_execution_time', 0);