2009-07-23 7 views
0

HI J'ai une table EMP_SCHED qui contient la colonne COMMENTAIRES pour EMP_ID et une autre table SHIFT qui contient également la colonne COMMENTS pour EMP_ID. les tables .Comment joindre croiser deux tables dans le serveur SQL

Par exemple, dans je 7 EMP_IDs dans le tableau EMP_SCHED et 2 EMPIDs en SHIFT .Je besoin de tous les EMPIDS et COMMNETNS et placez les commentaires pour EMPID commun des deux tables dans la ligne unique

Je pensais lieu d'abord adhérer à sur EMP_SCHED puis sur SHIFT, mais ils sont revenus plusieurs lignes

SELECT distinct E.[EMP_ID]as SCHED_EMP,S.EMP_ID as SHIFT_EMP, 
      E.[SCHED_COMMENT],S.COMMENTS  
    FROM [EMP_SCHED_COMMENT] E, SHIFT S 
    where e.emp_id =*s.emp_id 

La sortie avait l'air

NULL 33018 NULL Truck Delivery 
NULL 33029 NULL Order Beer/Wine 
NULL 33067 NULL Deli Shift Available 
NULL 33115 NULL Clean backroom 
NULL 34232 NULL ccccc 
34020 34020  kkkkkk 
34020 34020  looo 

Suis-je en train de faire corriger? également MY SQL SERVER ne permet pas des mots-clés LFET DROIT lorsqu'il est utilisé pour les jointures

(Une expression de type non booléen spécifié dans un contexte où une condition devrait, près de « gauche »)

Répondre

2

d'abord obtenir une distincte liste des ID

SELECT DISTINCT EMP_ID 
FROM EMP_SCHED 
UNION 
SELECT DISTINCT EMP_ID 
FROM SHIFT 

puis liez les tables d'origine.

Comment ne pas utiliser LEFT JOINS?

Cela fonctionne dans SQL Server 2005

DECLARE @Employee TABLE(
     EmpID INT, 
     Comment VARCHAR(MAX) 
) 

DECLARE @Shift TABLE(
     Emp_ID INT, 
     Comment VARCHAR(MAX) 
) 

INSERT INTO @Employee (EmpID,Comment) SELECT 1, 'Emp1' 
INSERT INTO @Employee (EmpID,Comment) SELECT 2, 'Emp2' 
INSERT INTO @Employee (EmpID,Comment) SELECT 3, 'Emp3' 

INSERT INTO @Shift (Emp_ID,Comment) SELECT 2, 'Shift2' 
INSERT INTO @Shift (Emp_ID,Comment) SELECT 3, 'Shift3' 
INSERT INTO @Shift (Emp_ID,Comment) SELECT 4, 'Shift4' 

SELECT * 
FROM (
      SELECT DISTINCT 
        EmpID 
      FROM @Employee 
      UNION 
      SELECT DISTINCT 
        Emp_ID 
      FROM @Shift 
     ) EmpIDs LEFT JOIN 
     @Employee e ON EmpIDs.EmpID = e.EmpID LEFT JOIN 
     @Shift s ON EmpIDs.EmpID = s.Emp_ID 
+0

J'avais utilisé mais si les noms de colonne sont difernet pour les deux. Ce qui se passe dans mon casse est ses valeurs de prélèvement de ma première table seulement – GustyWind

1
SELECT EMP_SCHED.COMMENTS, SHIFT.COMMENTS 
FROM EMP_SCHED LEFT OUTER JOIN SHIFT ON 
EMP_SCHED.EMP_ID = SHIFT.EMP_ID 
WHERE 
[(YOUR DATE RANGE FILTER)] 

dans la syntaxe SQL Server pour une jointure croisée est TABLE1 CROSS JOIN TABLEAU2 ..

ET jointure gauche est enfait LEFT OUTER JOIN ET DROIT OUTER JOIN EST DROIT OUI JOIN. Je ne suis pas sûr que LEFT et/ou RIGHT est la syntaxe appropriée.

+0

De votre question je ne vois pas vous avez besoin d'une jointure croisée. –

+0

J'ai essayé d'utiliser la jointure croisée mais je ne travaille pas parce que SQLSERVR2005 est en train d'expirer. Sinon, pouvez-vous suggérer quelque chose comme = * s'il y en a pour cross join – GustyWind

Questions connexes