多个一对多表过滤较低的表值

时间:2019-04-04 14:11:35

标签: sql

我有三个表,它们之间具有一对多的关系,即Table ATable BTable C,下面将进一步存储详细信息。根据以下结构:

`-------------------------------------------------------------------------- 
|  TABLE_A     |    |        TABLE_B       | |        TABLE_C              |
----------------    ------------------------ ------------------------------
| A_ID | A_DATA|    | B_ID | A_ID | B_DATA | | C_ID | B_ID | A_ID | C_DATA |
---------------     ------------------------ ------------------------------`

我已经使用连接Table ATable BTable BTable C编写了一个查询,并使用每个表上的字段添加了其他文件管理器。

`SELECT * from TABLE_A A
JOIN TABLE_B B ON A.A_ID=B.A_ID
JOIN TABLE_C C ON B.B_ID = C.B_ID
WHERE A.A_DATA='Some Parameter'
and B.B_DATA='Some Parameter'
and C.C_DATA<>'Some Parameter';`

如果表A中的数据满足条件C.C_DATA<>'Some Parameter',是否可以从表A中过滤掉数据?

1 个答案:

答案 0 :(得分:0)

对于您发布的代码段,它将过滤掉所有不满足WHERE子句所有条件的记录。为此,您可能需要在加入之前推送这些WHERE条件。

例如

SELECT * 
FROM A INNER JOIN B ON A.id= B.id
WHERE A.param1 = 'abc'
AND B.param2 = 'cba';

完全不同
SELECT * 
FROM (SELECT * FROM A WHERE A.param1 = 'abc') A 
INNER JOIN (SELECT * FROM B WHERE B.param2 = 'cba') B
ON A.id = B.id; 

第一个SQL将联接所有与id匹配的记录并将其过滤掉。在第二个记录中,它首先过滤记录,然后将所有与id匹配的记录联接起来。