2016-06-07 33 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。外部查询然后离开外部将所有表连接到子查询。没有左外连接不会失败 - 左连接(这是不一样的)会。 –

相关问题