2015-05-20 2 views
-1

Я новичок в SQL-соединениях и затрудняюсь логически объединять более двух таблиц. У меня есть таблица с именем PastExperienceКак присоединиться к нескольким таблицам в SQL Server?

PastExperience(id,eembossline,embossname,pastexperience,insertiondate,userid,dateofstay) 

и я присоединиться к нему с моей Users таблицы с помощью UserID для сопоставления обеих таблиц

Users(UserName,MerchantID,Userid) 

Для достижения этой цели я написал следующий запрос, который прекрасно справляется

Select 
Convert(varchar(50),PE.dateofstay,103) 'Date of Stay',PE.embossname 'EmbossName', PE.pastexperience,U.UserName from PastExperience PE 
inner join Users U 
on U.UserId=PE.userid 
where embossline='3100041810000001' 

Теперь, с чем я пытаюсь и борюсь, я хочу выбрать MerchantName1 из моей таблицы Merchant также на конкретном EmbossLine

Merchant(MerchantID,MerchantName1) 

EmbossLine с MerchantID может быть сопоставлен с card таблицы

Card(MerchantID,EmbossLine,EmbossName) 

Как я могу присоединиться к этим несколько таблиц? я пытался что-то вроде этого, но мой синтаксис является неправильным

Select 
    Convert(varchar(50),PE.dateofstay,103) 'Date of Stay', 
    C.embossname 'EmbossName', 
    PE.pastexperience, 
    U.UserName , 
    M.merchantname1 
    from PastExperience PE 
    inner join Users U on U.UserId=PE.userid 
    inner join Card C on C.MerchantID = Merchant.MerchantID 
    where PE.embossline='3100041810000001' 
+0

у кого есть стол для тиснения? –

+1

Пожалуйста, не используйте изображения для описания структуры таблицы. Вместо этого используйте операторы DDL или просто перечислите столбцы каждой таблицы в тексте. Это трудно понять, как сейчас. –

+0

Как таблица карт или таблица торгов относятся к таблицам 'users' или' PastExpierance'? – xQbert

ответ

0

Я понял, как получить желаемый результат. Это мой запрос

Select 
    Convert(varchar(50),PE.dateofstay,103) 'Date of Stay', 
    C.embossname 'EmbossName', 
    PE.pastexperience, 
    U.UserName , 
    M.merchantname1 
    from card C 
    inner join PastExperience PE on c.EmbossLine=PE.embossline 
    inner join Users U on U.UserId=PE.userid 
    inner join Merchant M on M.MerchantID=C.MerchantID 
    where PE.embossline='0093000110000001' 
0

Попробуйте это:

Select Convert(char(10),PE.dateofstay,103) 'Date of Stay', 
     PE.embossname 'EmbossName', 
     PE.pastexperience, 
     U.UserName, 
     M.MerchantName1 
from PastExperience PE 
inner join Users U on U.UserId=PE.userid 
inner join Cards C on (PE.EmbossLine = C.EmbossLine) 
inner join Merchant M on(U.MerchantId = M.MerchantId AND C.MerchantID = Merchant.MerchantID) 
where embossline='3100041810000001' 

Примечание # 1: Код был написан прямо здесь, там могут быть некоторые ошибки.
Примечание №2: Я изменил целевой тип данных преобразования из varchar (50) на char (10), строка, функция преобразования всегда возвращает строку с фиксированной длиной.

+0

U упустил карточный стол в соединении –

+0

Насколько я понимаю, таблица карт не имеет значения, поскольку ни один из ее столбцов не находится в предложении select или where. –

+0

@Zohar В вашем запросе отображается два разных 'MerchantName' в результирующем наборе, но в таблице этот конкретный' EmbossLine' имеет транзакцию только против одного 'Merchant' – Nuke

0

Используйте этот код:

Select 
    Convert(varchar(50),PE.dateofstay,103) 'Date of Stay', 
    PE.embossname 'EmbossName', 
    PE.pastexperience, 
    U.UserName , 
    M.merchantname1 
    from PastExperience PE 
    inner join Users U on U.UserId=PE.userid 
    inner join merchant m on m.merchantid=u.merchantid 
    inner join card C on m.merchantid=C.merchantid and PE.EmbossLine = C.EmbossLine 
    where embossline='3100041810000001' 
+0

Ваш код дублирует результаты в отношении 'Users' – Nuke

+0

Проверьте это сейчас, –

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