这种加入可行吗?

时间:2018-10-30 18:37:58

标签: mysql database join mysql-5.6

我有几个看起来像这样的桌子。

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

我希望做的是从prim_key检索所有值(value1value2value3TABLE B)(如果主要每个表的键都匹配,并且zero_or_oneTABLE A的值为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

这有可能吗?

我是否为此工作使用了正确的联接?

我的“全选”语法正确吗?

2 个答案:

答案 0 :(得分:2)

因为只有在table_b中找到匹配的主键,您才希望从table_a中输入条目;在这种情况下,一个简单的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

答案 1 :(得分:2)

这个答案并不意味着一个真正的答案,而是意味着如何在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