这可能加入吗?

Is This Join Possible?

我有几个 table 看起来像这样。

table_a     |   table_b
-------------------------
prim_key    |   prim_key
zero_or_one |   value1
valueA      |   value2
valueB      |   value3
valueZ      |

我希望做的是从 TABLE B 中检索所有值(prim_keyvalue1value2value3)如果每个 table 匹配的主键和 TABLE Azero_or_one 的值是 0.

我是 joins 的新手,我不确定我应该为此使用哪个连接,但似乎 FULL OUTER JOIN 最合适。

SELECT table_b.*
FROM table_a
FULL OUTER JOIN table_b
ON table_a.prim_key = table_b.prim_key

这可能吗?

我是否使用了正确的联接方式?

我的 "select all" 语法正确吗?

因为只有当在 table_a 中找到匹配的主键时,您才需要来自 table_b 的条目;在这种情况下,一个简单的 Inner Join 就足够了

SELECT table_b.*
FROM table_b
INNER JOIN table_a
  ON table_a.prim_key = table_b.prim_key AND 
     table_a.zero_or_one = 0

这个答案并不意味着真正的答案,而是意味着如何在 MySQL 中模拟 FULL OUTER JOIN。

MySQL 不支持 FULL OUTER JOIN,您可以使用 LEFT JOIN、UNION ALL 和 RIGHT JOIN 模拟它

SELECT * FROM table_a LEFT JOIN table_b ON table_a.prim_key = table_b.prim_key
UNION ALL
SELECT * FROM table_a RIGHT JOIN table_b ON table_a.prim_key = table_b.prim_key
WHERE table_a.prim_key IS NULL