我有三个表,它们之间具有一对多的关系,即Table A
到Table B
到Table 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 A
到Table B
和Table B
到Table 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中过滤掉数据?
答案 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匹配的记录联接起来。