如何在MySQL中连接两个不同行数的表?
我有两张桌子要连接 表A: 表B: 结果表: 我试着用这样的方法:如何在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以生成结果表中所示的结果?如果需要所有结果,则需要一个外部
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;