sql >> Database teknologi >  >> RDS >> Mysql

SQL for at returnere et sammenlagt sæt resultater

Dette kan opnås med relationel opdeling :

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

resultat:

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

hvor din forespørgsel er your_table_or_query og

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

er divisor .

Dette vil returnere ordre-id'erne 1236 og 1239; de kan derefter join ed til den oprindelige forespørgsel for at få alle rækkerne med disse ordre-id'er, hvis det er det, du ønsker.

Fuld forespørgsel sammen med indsæt sætninger:

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;
 

Resultat:

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

  1. Flere MySQL-tabel til json_encode

  2. Sådan opgraderes fra MySQL gamle adgangskoder til nyt adgangskodesystem

  3. C# Entity Framework:Nøgleord ikke understøttet:'port'

  4. Returner kun række, hvis værdien ikke eksisterer