在Ms Access中查询,如何创建连接链(有自己的标准),只有在连接的第一部分存在时才会显示
我试图做一个查询,使得来自7个不同表的新表,然后我需要在C#程序中使用这个查询,所以我不能使2个查询来做到这一点。在Ms Access中查询,如何创建连接链(有自己的标准),只有在连接的第一部分存在时才会显示
我如何进行连接,只有在连接的两部分相等时才显示出来,如果显示出来,它会从第三个表中获取更多信息,并且只有当其中一列出现第三个表格等于2.
例如,我有很多不同的连接,并且在表1中的一部分中,我将它加入到表2中。我希望表1中的所有内容都显示出来,只有匹配如果表1和2匹配,则表2中的信息仅在符合表3中的特定标准时才显示,该表3连接到表2.
我希望这有意义吗?
谢谢!
编辑
没关系的主要问题是我能够设置只会发生一定参加,而不是整个查询条件?
从您提供的信息来看,您似乎想要按照您的标准将表2连接到表1,将内部连接表3连接到表2。
例如,我有很多不同的关节,并在其中的一部分,表1,我把它加入到表2
好吧,你想表1加入到表2
我希望表1中的所有内容都显示出来,并且仅匹配表2中的匹配项。
这称为从表1到表2的左连接。左连接返回左手表中的所有记录,即使右手表中没有匹配的记录。
所以,到目前为止,我们已经
SELECT *
FROM Table1 T1
LEFT JOIN Table2 T2 ON T1.ID = T2.ID
,如果表1和2的比赛,在表2中的信息只显示了它是否适合从表3中,这是关节表2中的某些标准。
这意味着你想要在Table2和Table3之间进行内连接。一个Inner Join返回所有匹配左右手表的记录。让我们结合这与我们的第一个查询:
SELECT *
FROM Table1 T1
LEFT JOIN Table2 T2 ON T1.ID = T2.ID
INNER JOIN Table3 T3 ON T3.ID = T2.ID
然而,这是不行的。这只会返回匹配所有3个表的记录,因为Inner Join应用于第一个左连接的结果。 你在这种情况下需要的是派生表。您可以通过下面的查询得到一个:
SELECT *
FROM @Table1 T1
LEFT JOIN (
SELECT T2.ID as T2ID, T2.HairColor as HairColor, T3.ID as T3ID, T3.Age as Age FROM @Table2 T2
INNER JOIN @Table3 T3 ON T3.ID = T2.ID
WHERE T3.Age = 3
) as T2SubSet ON t1.ID = T2SubSet.T2ID
这是通过创建表2/3您正在寻找的子集,然后取该查询的结果,并将其与加入到表1评价左加入。对于一个完整的完整的例子,你可以用下面的查询:
DECLARE @Table1 TABLE(
ID int,
Name varchar(10))
DECLARE @Table2 TABLE(
ID int,
HairColor varchar(10))
DECLARE @Table3 TABLE(
ID int,
Age int)
INSERT INTO @Table1 values (1, 'John'), (2, 'Mary'), (3,'Sue')
INSERT INTO @Table2 values (1, 'Red'), (2, 'Brown'), (3, 'Black')
INSERT INTO @Table3 values (1, 3), (2, 5), (4,8)
SELECT *
FROM @Table1 T1
LEFT JOIN @Table2 T2 ON T1.ID = T2.ID
INNER JOIN @Table3 T3 ON T3.ID = T2.ID
SELECT *
FROM Table1 T1
LEFT JOIN (
SELECT T2.ID as T2ID, T2.HairColor as HairColor, T3.ID as T3ID, T3.Age as Age FROM Table2 T2
INNER JOIN Table3 T3 ON T3.ID = T2.ID
) as T2SubSet ON t1.ID = T2SubSet.T2ID
我也只注意到你说:在第三个表 列等于2
这可以通过添加另一个完成“在” LIKE语句‘T3.Column = 2’使用上面我最后一次查询,这将是
SELECT *
FROM @Table1 T1
LEFT JOIN (
SELECT T2.ID as T2ID, T2.HairColor as HairColor, T3.ID as T3ID, T3.Age as Age FROM @Table2 T2
INNER JOIN @Table3 T3 ON T3.ID = T2.ID AND T3.Age = 2
) as T2SubSet ON t1.ID = T2SubSet.T2ID
您可以使用内部联接 – Brad 2015-01-26 21:24:41
我试过了,但怎么做我所设定的标准,因此只适用于它的时候达到那部分o f加入吗? – Ira 2015-01-26 21:27:10
http://stackoverflow.com/help/how-to-ask – 2015-01-26 21:28:10