Mysql 内部连接两次并在两次连接上使用 WHERE

标签 mysql inner-join

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

相关文章:

java - Hibernate - 强制父类和子类之间的内部连接

mysql - 如何进行计数查询并连接两个表

mysql - 内部连接不正确的总和()

doctrine - 查询生成器/DQL无法与INNER JOIN一起使用-语法问题

mysql - 在 mySQL 数据库中搜索 %20

php - 如何在 Codeigniter 的 View 中使用两个表数据

mysql - SQLyog创建外键错误

java - 即使servlet 数据库中不存在表employee,rs 也始终为true

mysql - 如何通过命令行或脚本向 phpBB 添加新用户?

mysql - 在 mysql 数据库中为连接建立索引