2016-06-07 72 views
0

我有三個表person_firstname,person_middlename,person_lastname。所有表格都有公用字段entity_id。我必須在單個記錄中選擇員工全名。不確定的人只有名字,全名或只有姓。我嘗試聯合它返回三排。如何從三個不同的表中選擇員工全名

還需要通過entity_id記錄特定員工。 SO需要匹配像entity_id = 123這樣的記錄。僱員的ENTITY_ID的所有姓名爲123

+0

是否每個員工都保證有姓? –

+0

沒有員工可以擁有第一個,最後一個,中間,全部或沒有名字。每件事都是可選的。 – krishnaisdinesh

+1

你將需要一個非常難看的模擬外連接集。 –

回答

0

SELECT p1.first_name person_firstname,p2.middle_name person_middlename,p3.last_name person_lastname FROM person_firstname P1 JOIN person_middlename P2 ON p1.entity_id = p2.entity_id JOIN person_lastname P3在P3上。 ENTITY_ID = p2.entity_id;

+0

感謝您的迴應,但不確定哪張表包含記錄一,二或全部。所以我認爲不會工作,需要獲得特定的記錄。像是entity_id = 123。 Entity_id表示員工ID。 – krishnaisdinesh

+0

你可以使用USING子句與entity_id,但我確定它會工作 – Moreshwar

+0

2tables它將是 - – Moreshwar

0
/* 
DROP TABLE PERSON_FIRSTNAME; 
DROP TABLE PERSON_SECONDNAME; 
DROP TABLE PERSON_LASTNAME; 

CREATE TABLE PERSON_FIRSTNAME (ID INT, NAME VARCHAR(20)); 
CREATE TABLE PERSON_SECONDNAME (ID INT, NAME VARCHAR(20)); 
CREATE TABLE PERSON_LASTNAME (ID INT, NAME VARCHAR(20)); 
TRUNCATE TABLE PERSON_FIRSTNAME; 
INSERT INTO PERSON_FIRSTNAME VALUES(1,'af'),(2,'bf') ; 
TRUNCATE TABLE PERSON_SECONDNAME; 
INSERT INTO PERSON_SECONDNAME VALUES(1,'as') ,(3,'cs') ; 
TRUNCATE TABLE PERSON_LASTNAME; 
INSERT INTO PERSON_LASTNAME VALUES(1,'al'),(2,'bl') ; 
*/ 

SELECT S.*, 
     PF.NAME, 
     PS.NAME, 
     PL.NAME, 
     concat(IFnull(PF.NAME,''),IFnull(PS.NAME,''),IFNULL(PL.NAME,'')) 
FROM 
(
SELECT ID FROM PERSON_FIRSTNAME 
UNION 
SELECT ID FROM PERSON_SECONDNAME 
UNION 
SELECT ID FROM PERSON_LASTNAME 
) S 
left outer JOIN PERSON_FIRSTNAME PF ON PF.ID = S.ID 
left outer JOIN PERSON_SECONDNAME PS ON PS.ID = S.ID 
left outer JOIN PERSON_LASTNAME  PL ON PL.ID = S.ID 
+0

DB是已經運行的應用程序的一部分。我正在添加功能。所以要添加功能,我不能修改數據庫的結構。我認爲,正如我所描述的那樣,對於所有表格中的記錄數據都是可用的,這是沒有把握的。如果沒有,那麼根據我的理解,加入將無法獲取數據。 – krishnaisdinesh

+0

您正在開發生產?哦,親愛的......我的解決方案中的表格就是爲了證明解決方案的工作原理,並且他們被註釋掉了。如果你有一個開發環境,你應該創建表並運行select來幫助你理解解決方案在做什麼,簡而言之,子查詢(包含聯合的位)查看所有表並創建一個臨時表在所有表中都有DISTINCT ID。外部查詢然後離開外部將所有表連接到子查詢。沒有左外連接不會失敗 - 左連接(這是不一樣的)會。 –

相關問題