Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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
C# 查询在Ms Access中,如何创建只有在联接的第一部分存在时才显示的联接链(具有自己的条件)_C#_Sql_Database_Ms Access_Ms Access 2010 - Fatal编程技术网

C# 查询在Ms Access中,如何创建只有在联接的第一部分存在时才显示的联接链(具有自己的条件)

C# 查询在Ms Access中,如何创建只有在联接的第一部分存在时才显示的联接链(具有自己的条件),c#,sql,database,ms-access,ms-access-2010,C#,Sql,Database,Ms Access,Ms Access 2010,我正在尝试创建一个查询,从7个不同的表中创建一个新表,然后我需要在C程序中使用这个查询,所以我无法创建2个查询来完成此操作 我如何创建一个只有当连接的两部分相等时才会显示的连接,如果它确实显示,它会从第三个表中获取更多信息,并且只有当第三个表中的一列等于2时才会真正显示 例如,我有很多不同的连接,在表1的一部分,我将它连接到表2。我希望表1中的所有内容都显示出来,并且只显示表2中匹配的内容。如果表1和表2中的信息匹配,那么表2中的信息只有在符合表3中的某个条件时才会显示,即连接到表2中 我希望这

我正在尝试创建一个查询,从7个不同的表中创建一个新表,然后我需要在C程序中使用这个查询,所以我无法创建2个查询来完成此操作

我如何创建一个只有当连接的两部分相等时才会显示的连接,如果它确实显示,它会从第三个表中获取更多信息,并且只有当第三个表中的一列等于2时才会真正显示

例如,我有很多不同的连接,在表1的一部分,我将它连接到表2。我希望表1中的所有内容都显示出来,并且只显示表2中匹配的内容。如果表1和表2中的信息匹配,那么表2中的信息只有在符合表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是关联的

这意味着您需要表2和表3之间的内部联接。内部联接返回与左侧和右侧表匹配的所有记录。让我们结合第一个查询:

SELECT *
FROM Table1 T1
    LEFT JOIN Table2 T2 ON T1.ID = T2.ID
    INNER JOIN Table3 T3 ON T3.ID = T2.ID
然而,这是行不通的。这只返回与所有3个表匹配的记录,因为内部联接应用于第一个左联接的结果。 在这种情况下,您需要的是一个派生表。您可以使用以下查询获取一个:

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
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/3的子集,然后获取该查询的结果,并使用左联接将其联接到表1来评估这一点。对于完整的示例,可以使用以下查询:

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
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

这可以通过使用我上面的最后一个查询添加另一个类似于“T3.Column=2”的“On”语句来实现,它应该是

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

你可以使用内部连接我试过了,但是我如何设置标准,使其仅在到达连接的该部分时才适用?你必须发布不适用于你的详细信息、编写的代码和一些示例数据。它是连接,而不是连接