MySQL присоединиться, только если поле имеет определенное значение - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь получить таблицу при определенных условиях с помощью соединения.Моя таблица:

        tab_registrations
    --------------------------------------------
    reg_id |familyid| familyname  | parent_id |
           |        |             |           |
    -------|--------|-------------|-----------|
    1      |  2     |   null      | null      |
    -------|--------|-------------|-----------|
    2      | others |    abc      | 3         |
    -------|--------|-------------|-----------|
    3      | 3      |   null      |   null    |
    -------|--------|-------------|-----------|
    4      | others |  def        |   2       |
    -------|--------|-------------|-----------|

    tab_family
    -------------------------------------
    family_id | family_name | parent_id |
              |             |           |
    -------------------------------------
    1         | tyu         |   0       |
    -------------------------------------
    2         | xyz         |   1       |
    -------------------------------------
    3         | mno         |   2       |
    -------------------------------------

Я хочу объединить эти таблицы в:

  1. , если tab_registrations.family не равно нулю, затем выберите соответствующий parent_id из tab_family

    SELECT tab_registration.*,tab_family.family_id,tab_family.parent_id
     FROM `tab_registration`
     join tab_family  on tab_registration.family_id = tab_family.family_id
     WHERE reg_id = 1
    
  2. , если tab_registrations.family равен 'other', тогда выберите tab_registrations.familyname и tab_registrations.parent_id

Когда я попробую вышезапрос, если tab_registrations.family = 'другие', строки не извлечены

Как этого добиться?Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

может пригодиться этот запрос

SELECT tr.*,tf.family_id,tf.parent_id,
 IF(tr.familyid='others',tr.familyname,tf.family_name) as fname
 IF(tr.familyid='others',tr.parent_id,tf.parent_id) as parentId
 FROM `tab_registration` tr
 left join tab_family tf on tr.family_id = tf.family_id
0 голосов
/ 13 декабря 2018

Измените на LEFT JOIN при условии, что tab_registration.familyid не равно others.Кроме того, вы можете использовать условные операторы CASE..WHEN для получения значений familyname и parent_id.

SELECT tr.*,
       CASE WHEN tr.familyid = 'others' THEN tr.familyname 
            ELSE tf.family_name
       END AS familyname, 
       CASE WHEN tr.familyid = 'others' THEN tr.parent_id 
            ELSE tf.parent_id
       END AS parent_id
FROM tab_registration tr
LEFT JOIN tab_family tf
  ON tr.family_id = tf.family_id AND 
     tr.familyid <> 'others'
WHERE tr.reg_id = 1

Для многостоловых запросов, если предпочтительнее использовать псевдонимы для ясности и читаемости кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...