2013-11-09 33 views
-1

如果值不爲null,則嘗試將表中的3列連接到一個列中。這是我的表:如果值不爲空,則mysql連接列

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' ,'') )as concat FROM'roles_map' where concat ='admin' 我該怎麼做?我不能使用新的專欄;/ – 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` , '') 
      ) 

鏈接:CONCATIFNULL

+0

兩個選項都不錯,但接下來,我需要使用這樣的: 選擇 CONCAT( IFNULL('username_a', '') ,IFNULL('username_l', '') ,IFNULL('username_u' ,'') )as concat FROM'roles_map' where concat ='admin' 我該怎麼做?我不能使用新的專欄;/ – tommy

+0

我已經更新了我的答案。 – Uours

相關問題