Mysql 没有重复项的左联接表
我有两张桌子- t1: t2: 什么样的SQL查询将连接这两个表;给我一个这样的结果:Mysql 没有重复项的左联接表,mysql,sql,sql-server,Mysql,Sql,Sql Server,我有两张桌子- t1: t2: 什么样的SQL查询将连接这两个表;给我一个这样的结果: col_1 col_2 col_3 col_4 10001 apple 3 123 10001 orange 2 345 10001 grapes 5 连接表,然后使用COALESCE获取第一个非空数据列 SELECT COALESC
col_1 col_2 col_3 col_4
10001 apple 3 123
10001 orange 2 345
10001 grapes 5
连接表,然后使用COALESCE获取第一个非空数据列
SELECT COALESCE(t1.col_1,t2.col_1) col_1,
COALESCE(t1.col_2,t2.col_2) col_2,
COALESCE(t1.col_3,t2.col_3) col_3,
COALESCE(t2.col_4,'') col_4,
FROM t1
FULL JOIN t2 ON t1 ON t1.col_1 = t2.col1 AND t1.col_2 = t2.col_2 AND t1.col_3 = t2.col_3
如果col_1和col_2标识唯一条目,则将最后一行更改为:
LEFT JOIN t2 using(col_1,col_2);
LEFT JOIN t2 using(col_1,col_2,col_3);
如果列1、列2、列3标识唯一条目,则将最后一行更改为:
LEFT JOIN t2 using(col_1,col_2);
LEFT JOIN t2 using(col_1,col_2,col_3);
我不明白。所需结果似乎与第一个表相同。第二个表似乎是第一个表的简单子集。您想实现什么?如果每个表的列不相同,又如何?我已经编辑了我的问题,谢谢,我现在明白了。谢谢你更新这个问题。第二个表中是否有不在第一个表中的记录?或者所有的记录总是在第一个表中,只有一些记录也在第二个表中?请更正标记。它们应该是mysql或sql server,而不是两者都是。如果每个表的列不相同呢?我已经编辑了我的问题,thanksPlain UNION可以返回不同的行,UNION distinct对于SQL Server的语法不正确如果每个表的列不相同呢?我已经编辑了我的问题,谢谢first SELECT将为所有列设置别名。这意味着您可以在第二个表中有col_4、col_5和col_6,但是您仍然可以访问col_1、col_2和col_3这三列。只要记住在每个UNION SELECT中有相同数量的列。通过只连接col_1,您的查询将返回3x2=6行,而不是3行
SELECT t1.*,
col_4
FROM t1
LEFT JOIN t2 using(col_2);
LEFT JOIN t2 using(col_1,col_2);
LEFT JOIN t2 using(col_1,col_2,col_3);