sql >> Databáze >  >> RDS >> Mysql

SQL vrátit sloučenou sadu výsledků

Toho lze dosáhnout pomocí relačního rozdělení :

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

výsledek:

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

kde je váš dotaz your_table_or_query a

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

je divisor .

Tím se vrátí ID objednávky 1236 a 1239; pak je lze join ed do původního dotazu, abyste získali všechny řádky s těmito ID objednávek, pokud to chcete.

Úplný dotaz spolu s příkazy vložení:

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;

Výsledek:

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


  1. Jak opravím chybu „Hodnota mimo rozsah upravena pro sloupec“?

  2. Oprava chyby R2 2008, která porušuje RCSI

  3. Jaký je nejlepší způsob, jak zjistit, kterou verzi klienta Oracle používám?

  4. SQL Server:Dynamická klauzule where