在两个不同的表中显示两列的值到sql server中的一列

时间:2016-05-10 18:29:58

标签: sql-server sql-server-2008

有两个表1)参与者和2)logindatetime。 第一次登录datetime值以及其他用户数据,如名称,位置,联系号码,电子邮件被插入到具有datatime列的参与者表中...对于同一用户的任何后续登录,我们将datetime值插入logindatetime列以保持用户登录的次数记录....现在我必须在一列中显示所有登录时间(首次登录时间和后续登录时间)以及姓名,位置,联系人号码,同一用户的电子邮件。 (我在参与者表中有一个身份)。

尝试了以下查询:

mort = node()
mort.student='murtaza'
mort.grow()

但它会多次显示首次登录时间。

4 个答案:

答案 0 :(得分:1)

你需要做这样的事情来分别获取第一个和其他登录:

select a.firstname as Name, a.Email, a.Address1 as Location, 
    a.MobileNo as Contact, a.datetime 
from eventonline.participant a

union all

select a.firstname as Name, a.Email, a.Address1 as Location, 
    a.MobileNo as Contact, b.datetime 
from eventonline.participant a
join eventonline.logindatetime b on a.Id = b.Rid

将第一次登录添加到logindatetime

可能更容易

答案 1 :(得分:0)

JamesZ的回答给出了解决方案,但进一步说明了为什么你的方法不起作用。您正在加入这两个表并使用coalesce(a.DateTime, b.DateTime)来显示登录时间。如果用户之前已登录,则a.DateTime具有非空值。如果coalesce(x,y)为空,则y仅使用x。但这不是真正的问题。第一个登录时间需要在logindatetime表中记录自己的记录。如果用户登录5次,则logindatetime将有4行,并且在加入这两个表时您将看到所有这些行。您需要将第一个登录时间保存为logindatetime中的行,或者使用UNION强制将第一个登录时间添加为额外行。

答案 2 :(得分:0)

我遇到了同样的问题,但根据 James Z's answer 我解决了我的问题:

select a.start_date as start, a.end_date as end, a.rooms_id as roomid from maintenance a UNION ALL SELECT b.check_in as start, b.check_out as end, b.room_id AS roomid from reservations b

两个表的查询结果如下:

The result of the query from both tables are here

答案 3 :(得分:-1)

你可以在你的sql语句中使用联接,我刚刚在3天前学会了它们并且它们非常有用!

它看起来像这样:

SELECT * FROM table1 
LEFT JOIN table2 ON table1.column1 = table2.column1 
WHERE table1.column1 = '$yourVar';

table1.column1可以是id,第二个表中的对应id可以是将其链接到第一个表(外键)的id,它将检索第一个表的数据并带来所有数据第二个表格也与ON标准

相匹配