Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server中具有多个联接表的查询_Sql Server - Fatal编程技术网

Sql server SQL Server中具有多个联接表的查询

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... 说明

我有三张桌子:

表位置:

表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...
说明:

请注意表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