Sql server SQL Server中具有多个联接表的查询
我有三张桌子: 表位置: 表UserBackup PJS: 表历史记录: 我想显示如下数据:Sql server SQL Server中具有多个联接表的查询,sql-server,Sql Server,我有三张桌子: 表位置: 表UserBackup PJS: 表历史记录: 我想显示如下数据: Name | Date | Position | Comment =================================================== winz\beta 14-10-2014 Master B i not agree... winz\carlie 15-10-2014 Master A i agree... 说明
Name | Date | Position | Comment
===================================================
winz\beta 14-10-2014 Master B i not agree...
winz\carlie 15-10-2014 Master A i agree...
说明:
请注意表UserBackupPJS中的数据。
如果表历史中的StartDate介于表UserBackupPJS中的StartDate和EndDate之间,并且同一个用户随用户而更改,则通过表UserBackupPJS的KodePosition从表位置获取NamePosition。
现在,我有一个这样的存储过程,但不显示我需要的数据
select
A.IdHistory, A.StartDate, B.NamePosition, B.UserLogin, A.Comment
from
History as A
left join
Position as B on A.KodePosition = B.KodePosition
Where
A.IdHistory = '19F5FCFC'
order by
A.StartDate asc
请帮帮我,伙计们。。。谢谢…如果你想问三张表,你可以这样做。很抱歉没有使用你的数据,但我不理解它们之间的联系或你的解释
SELECT a.Column1, a.Column2, b.Column1
FROM table1 AS a
LEFT JOIN table2 AS b
ON a.Column1=b.Column1
WHERE (
SELECT c.Column1
FROM table3 AS c
INNER JOIN table2 as b
ON b.Column1=c.Column1
WHERE c.Column2 LIKE 'MyTarget%');
你必须考虑两个选择,不要试图把所有的东西都放在一个选择里。顺便说一句,大多数数据库不支持多连接。如果没有更多关于您尝试执行的操作的信息,这有点像是暗中操作……但是根据您的描述,我相信您正在尝试首先根据相应的History.KodePosition记录是否在相应的UserBackupPJS记录的StartDate和EndDate范围内筛选UserBackupPJS表中的行。然后,根据返回的KodePosition,您需要从Position表中检索相关记录。我不确定这是否是您正在寻找的完整图片,但希望这能让您走得更远:
;WITH cteData
AS (
SELECT u.KodePosition, h.IDHistory, h.StartDate, h.Comment
FROM UserBackup(PJS) u
INNER JOIN History h ON h.User = u.UserChange AND (h.StartDate >= u.Startdate and h.StartDate <= u.EndDate)
)
SELECT c.IDHistory, c.StartDate, p.NamePostition, p.UserLogin, c.Comment
FROM Position p
INNER JOIN cteData c ON c.KodePosition = p.KodePosition
您当前的查询有什么问题?它产生了什么?查询没有显示“table UserBackup PJS”表的基于名称位置的kodeposition。请注意描述。我希望你能帮忙。结果:| 19F5FCFC 15-10-2014 |大师A | winz\alfa |我同意…|根据您的查询结果,我可以在需要时获得“NamePosition”。但我有两个问题。只有一行,必须是两行显示。”“用户登录”显示必须为“winz\carlie”。如果无法更仔细地查看您的数据,我不确定是否可以为您提供特定的解决方案。我建议首先拉出并运行CTE中的查询,看看它是否包含您要查找的所有结果。如果是这样,那么您可能需要调整SELECT中的第二个查询加入或筛选的方式。如果没有,那么您可能需要调整CTE中的查询,以扩大范围。请记住,这只是查询数据的一种方式——我毫不怀疑您还可以选择其他方式。以此为起点。
select
A.IdHistory, A.StartDate, B.NamePosition, B.UserLogin, A.Comment
from
History as A
left join
Position as B on A.KodePosition = B.KodePosition
Where
A.IdHistory = '19F5FCFC'
order by
A.StartDate asc
SELECT a.Column1, a.Column2, b.Column1
FROM table1 AS a
LEFT JOIN table2 AS b
ON a.Column1=b.Column1
WHERE (
SELECT c.Column1
FROM table3 AS c
INNER JOIN table2 as b
ON b.Column1=c.Column1
WHERE c.Column2 LIKE 'MyTarget%');
;WITH cteData
AS (
SELECT u.KodePosition, h.IDHistory, h.StartDate, h.Comment
FROM UserBackup(PJS) u
INNER JOIN History h ON h.User = u.UserChange AND (h.StartDate >= u.Startdate and h.StartDate <= u.EndDate)
)
SELECT c.IDHistory, c.StartDate, p.NamePostition, p.UserLogin, c.Comment
FROM Position p
INNER JOIN cteData c ON c.KodePosition = p.KodePosition