Как связать две несвязанные таблицы через одну таблицу с общими значениями?

savedInstanceState предназначен только для сохранения состояния, связанного с текущим экземпляром Activity, например текущей информации о навигации или выборе, так что, если Android уничтожает и воссоздает действие, он может вернуться, как и раньше. См. Документацию для onCreate и onSaveInstanceState

. Для более долгого состояния рассмотрите возможность использования базы данных SQLite, файла или предпочтений. См. Сохранение постоянного состояния .

2
задан C. Peck 24 March 2019 в 21:31
поделиться

1 ответ

 WITH table_a AS (

      SELECT 1 AS reference, 'A' AS value_name, 'N' AS renewal_code FROM DUAL UNION ALL
      SELECT 2 AS reference, 'A' AS value_name, 'R' AS renewal_code FROM DUAL UNION ALL
      SELECT 3 AS reference, 'B' AS value_name, 'N' AS renewal_code FROM DUAL UNION ALL
      SELECT 4 AS reference, 'A' AS value_name, 'R' AS renewal_code FROM DUAL UNION ALL
      SELECT 4 AS reference, 'A' AS value_name, 'N' AS renewal_code FROM DUAL

      ),
      table_b AS (

      SELECT 1 AS reference, 'A' AS value_name, '0016' AS prod_code FROM DUAL UNION ALL
      SELECT 2 AS reference, 'A' AS value_name, '0027' AS prod_code FROM DUAL UNION ALL
 /*     SELECT 4 AS reference, 'A' AS value_name, '0032' AS prod_code FROM DUAL UNION ALL duplicate row excluded */
      SELECT 4 AS reference, 'A' AS value_name, '0032' AS prod_code FROM DUAL

      ),
      table_c AS (

      SELECT '0016' AS a_prod_code, 'Renewal'   AS a_tans_code,  5 AS commission_percent FROM DUAL UNION ALL
      SELECT '0027' AS a_prod_code, 'Renewal'   AS a_tans_code,  5 AS commission_percent FROM DUAL UNION ALL
      SELECT '0032' AS a_prod_code, 'New'       AS a_tans_code, 10 AS commission_percent FROM DUAL UNION ALL
      SELECT '0032' AS a_prod_code, 'Renewal'   AS a_tans_code,  5 AS commission_percent FROM DUAL

      )

          SELECT a.reference AS ref_a,
                 a.value_name AS value_name_a,
                 b.reference AS ref_b,
                 b.value_name AS value_name_b,
                 a.renewal_code,
                 b.prod_code,
                 c.commission_percent
            FROM table_a a
 LEFT OUTER JOIN table_b b
                  ON a.value_name = b.value_name
                 AND a.reference = b.reference
 LEFT OUTER JOIN table_c c
                  ON SUBSTR(c.a_tans_code, 1, 1) = a.renewal_code
                 AND c.a_prod_code = b.prod_code
 ;

Общее табличное выражение (CTE) просто для создания тех же значений, которые вы разместили (CTE - это деталь, использующая конструкцию WITH).

Результаты:

      REF_A VALUE_NAME_A         REF_B VALUE_NAME_B    RENEWAL_CODE    PROD_CODE    COMMISSION_PERCENT
 ---------- --------------- ---------- --------------- --------------- ---------- --------------------
          2 A                        2 A               R               0027                          5
          4 A                        4 A               N               0032                         10
          4 A                        4 A               R               0032                          5
          1 A                        1 A               N               0016                           
          3 B                                          N                                              

Возможно, вам придется проверить значения в опубликованных вами строках, которые не приводят к объединению. Это также предполагает отсутствие кодов: отношения code_name, которые нарушают правило первой буквы кода name = code.

0
ответ дан dreamwork 24 March 2019 в 21:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: