Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL, aby zwrócić scalony zestaw wyników

Można to osiągnąć za pomocą podziału relacyjnego :

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

wynik:

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

gdzie Twoje zapytanie to your_table_or_query i

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

to divisor .

Spowoduje to zwrócenie identyfikatorów zamówień 1236 i 1239; mogą być wtedy join ed do oryginalnego zapytania, aby uzyskać wszystkie wiersze z tymi identyfikatorami zamówień, jeśli tego chcesz.

Pełne zapytanie wraz z instrukcjami insert:

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;

Wynik:

+-------+----------+
| 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. Importuj dane z Excela do MySql za pomocą węzła JS

  2. Liczba całkowita kontra znak dla właściwości rekordu DB

  3. DAYOFYEAR() Przykłady – MySQL

  4. Zmienna zdefiniowana przez użytkownika SET w mysql zwraca null?

  5. ColdFusion:wiele instrukcji SQL w zapytaniu?