Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL中连接两个不同行数的表?_Sql_Mysql_Database_Join - Fatal编程技术网

如何在MySQL中连接两个不同行数的表?

如何在MySQL中连接两个不同行数的表?,sql,mysql,database,join,Sql,Mysql,Database,Join,我有两张桌子要连接 表A: 表B: 结果表: 我试着用这样的方法: SELECT TABLE_A.row_id, TABLE_A.category, TABLE_A.val_1, TABLE_B.val_2 FROM TABLE_A INNER JOIN TABLE_B ON TABLE_B.row_id = TABLE_A.row_id ORDER BY row_id; 但是,结果仅包括表A中存在行id列的行 是否有方法连接表A和表B以生成结果表中所示的结果?如果需要所有结果,则需要一个外部

我有两张桌子要连接

表A: 表B: 结果表: 我试着用这样的方法:

SELECT TABLE_A.row_id, TABLE_A.category, TABLE_A.val_1, TABLE_B.val_2
FROM TABLE_A
INNER JOIN TABLE_B ON TABLE_B.row_id = TABLE_A.row_id
ORDER BY row_id;
但是,结果仅包括表A中存在
行id
列的行


是否有方法连接表A和表B以生成结果表中所示的结果?

如果需要所有结果,则需要一个外部连接,而不是内部连接。(内部只返回匹配的行;外部返回所有行,匹配的行“缝合在一起”)

这应该做到:

SELECT 
  TABLE_B.row_id row_id, 
  TABLE_A.category category, 
  COALESCE(TABLE_A.val_1,1) val_1,
  TABLE_B.val_2 val_2
FROM TABLE_A
RIGHT OUTER JOIN TABLE_B 
  ON TABLE_B.row_id = TABLE_A.row_id
ORDER BY TABLE_B.row_id;
右外部联接
从表_B中提取所有记录,即使它们在表_A中不存在,并且该语句是返回其第一个非空参数的函数。在这种情况下,如果表A中没有值,它将返回
1
,这就是示例结果所列出的所需输出。

尝试外部联接

SELECT TABLE_A.row_id, TABLE_A.category, TABLE_A.val_1, TABLE_B.val_2
FROM TABLE_B
LEFT OUTER JOIN TABLE_A ON TABLE_B.row_id = TABLE_A.row_id
ORDER BY row_id;

请尝试完全联接。
SELECT TABLE_A.row_id, TABLE_A.category, TABLE_A.val_1, TABLE_B.val_2
FROM TABLE_A
INNER JOIN TABLE_B ON TABLE_B.row_id = TABLE_A.row_id
ORDER BY row_id;
SELECT 
  TABLE_B.row_id row_id, 
  TABLE_A.category category, 
  COALESCE(TABLE_A.val_1,1) val_1,
  TABLE_B.val_2 val_2
FROM TABLE_A
RIGHT OUTER JOIN TABLE_B 
  ON TABLE_B.row_id = TABLE_A.row_id
ORDER BY TABLE_B.row_id;
SELECT TABLE_A.row_id, TABLE_A.category, TABLE_A.val_1, TABLE_B.val_2
FROM TABLE_B
LEFT OUTER JOIN TABLE_A ON TABLE_B.row_id = TABLE_A.row_id
ORDER BY row_id;