2013-11-09 3 views
-1

Я пытаюсь объединить 3 столбца из моей таблицы в одну, если значение не равно нулю. это мой стол:mysql join column, если значение не является нулевым

CREATE TABLE IF NOT EXISTS `roles_map` (
    `rm_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `username_a` varchar(45), 
    `username_l` varchar(45), 
    `username_u` varchar(45), 
    `password` varchar(45) NOT NULL, 
    `role_id` int(1) NOT NULL, 
    PRIMARY KEY (`rm_id`), 
    FOREIGN KEY (username_u) REFERENCES users(index_num), 
    FOREIGN KEY (username_a) REFERENCES admins(login), 
    FOREIGN KEY (username_l) REFERENCES lecturers(id_number), 
    FOREIGN KEY (role_id) REFERENCES roles_name(role_id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

я пытаюсь присоединиться username_l, username_u, username_a, потому что только один имеет значение! = NULL.

Может ли кто-нибудь мне помочь?

+0

Пытались ли вы что-нибудь? –

ответ

0

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

SELECT IFNULL(`username_l`, IFNULL(`username_u`, `username_a`)) AS `username` 
FROM `roles_map` 
WHERE IFNULL(`username_l`, IFNULL(`username_u`, `username_a`)) = 'admin' 
+0

как вариант хорошо, но рядом я должен использовать это так: ВЫБРАТЬ CONCAT ( IFNULL ('username_a', '') , IFNULL (' username_l', '') , IFNULL ('username_u' , '') ) как concat FROM 'role_map' где concat = 'admin' как я могу это сделать? i can not use new column;/ – tommy

+0

См. мое редактирование. Обратите внимание, что это не будет хорошим способом сделать это, потому что он не будет хорошо использовать индексы. Было бы лучше реорганизовать данные, если это возможно. –

1

Если вы просто хотите получить CONCAT enated значение, то можно сделать так:

SELECT 
    CONCAT(
     IFNULL(`username_a` , '') 
     ,IFNULL(`username_l` , '') 
     ,IFNULL(`username_u` , '') 
    ) 
FROM `roles_map` 

Но если вы хотите сохранить его в новом столбце говорят username, сначала добавьте столбец:

ALTER TABLE `roles_map` ADD `username` VARCHAR(45) NOT NULL DEFAULT ''; 

Затем с помощью UPDATE заявление что-то вроде этого:

UPDATE `roles_map` 
    SET `username` = 
     CONCAT(
      IFNULL(`username_a` , '') 
      ,IFNULL(`username_l` , '') 
      ,IFNULL(`username_u` , '') 
     ) 

Чтобы РЕГИСТРИРУЙТЕСЬ вы могли бы попробовать что-то вроде этого:

SELECT 
    `roles_map`.* 
    ,CONCAT(
     IFNULL(`username_a` , '') 
     ,IFNULL(`username_l` , '') 
     ,IFNULL(`username_u` , '') 
    ) AS username 
FROM 
    `roles_map` 
    LEFT OUTER JOIN 
     `admins` ON 
      `admins`.`login` = 
      CONCAT(
       IFNULL(`roles_map`.`username_a` , '') 
       ,IFNULL(`roles_map`.`username_l` , '') 
       ,IFNULL(`roles_map`.`username_u` , '') 
      ) 

Ссылки: CONCAT, IFNULL

+0

как вариант хорошо, но рядом я должен использовать это так: ВЫБРАТЬ CONCAT ( IFNULL ('username_a', '') , IFNULL (' username_l', '') , IFNULL ('username_u' , '') ) как concat FROM 'role_map' где concat = 'admin' как я могу это сделать? я не могу использовать новую колонку;/ – tommy

+0

Я обновил свой ответ. – Uours

 Смежные вопросы

  • Нет связанных вопросов^_^