Объединение двух / четырех столов - PullRequest
0 голосов
/ 21 октября 2019

Я работаю над программой искры, которая по сути пытается объединить следующие две таблицы:

Table1


+---+---+---+  
| a | b | c |  
+---+---+---+  
| 1 | 2 | 6 |  
| 4 | 5 | 6 |  
+---+---+---+

Table2:


+---------+-----+--------+  
|Attribute|Value|Validity|  
+---------+-----+--------+  
|    A    |  1  |  false |  
|    A    |  4  |  false |  
|    B    |  2  |  false |  
|    B    |  5  |  false |  
|    C    |  6  |  true  |  
+---------+-----+--------+  

Я хочу найти каждую пару (атрибут, значение), если она действительна. По сути, итоговая таблица таблиц, которая содержит всю необходимую мне информацию, может выглядеть следующим образом:

+-+-+-+---------+---------+---------+  
|A|B|C|ValidityA|ValidityB|ValidityC|  
+-+-+-+---------+---------+---------+  
|1|2|6|  false  |  false  |  true   |  
|4|5|6|  false  |  false  |  true   |  
+-+-+-+---------+---------+---------+  

Над таблицей можно было бы, например, выполнить тройное объединение после выполнения некоторой предварительной обработки таблиц. Но тройное соединение кажется мне очень неэффективным, так как я работаю с большими данными. Также я должен был бы использовать цикл для отдельного выполнения каждого соединения, что мне тоже не нужно.

Кто-нибудь знает способ архивирования вышеуказанного результата с помощью одного запроса (дополнительная предварительная обработка и простые изменения в таблицахнет проблем)?

Я не могу заставить форматирование работать должным образом, прошу прощения.

С уважением
-Барри

1 Ответ

1 голос
/ 21 октября 2019

Вы можете join таблицы, по одному разу для каждого атрибута:

select t1.*,
       a.validity as validityA,
       b.validity as validityB,
       c.validity as validityC
from table1 t1 left join
     table2 a
     on t1.a = a.value and a.attribute = 'A' left join
     table2 b
     on t1.b = b.value and b.attribute = 'B' left join
     table2 c
     on t1.b = c.value and c.attribute = 'C';

Примечание: Возвращает NULL значения столбца достоверности, если в table2.

нет совпадений.
...