在 MySQL 中,我想 SELECT A.* FROM A
满足内部连接条件,无论是直接(连接表 B
)还是 通过另一个连接表 (C
),WHERE B.field = myvalue
。谁能指出获得结果的正确方法?
我有以下表:A、B、C,它们之间的关联如下(A 连接 B,B 连接 C,A 连接 C):
B
/ \
A --- C
它看起来非常简单,但是当我运行以下代码时,我得到了一个空集,即使我将搜索限制为仅通过 C 连接 B 时得到的结果也是如此:
SELECT A.* FROM A
INNER JOIN C ON C.id = A.c_id
INNER JOIN B AS B_thru_C ON B_thru_C.id = C.b_id
INNER JOIN B AS B_from_A ON B_from_A.id = A.b_id
WHERE B_thru_C.field = 'myvalue' OR B_from_A.field = 'myvalue';
# yields an empty set
SELECT A.* FROM A
INNER JOIN C ON C.id = A.c_id
INNER JOIN B AS B_thru_C ON B_thru_C.id = C.b_id
WHERE B_thru_C.field = 'myvalue';
# yields results
最佳答案
这个怎么样?
SELECT A.* FROM A
LEFT OUTER JOIN C ON C.id = A.c_id
INNER JOIN B ON B.id = A.b_id OR B.id = C.b_id
WHERE B.field = 'myvalue';
关于Mysql 内部连接两次并在两次连接上使用 WHERE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15825648/