Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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 没有重复项的左联接表_Mysql_Sql_Sql Server - Fatal编程技术网

Mysql 没有重复项的左联接表

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

我有两张桌子-

t1:

t2:

什么样的SQL查询将连接这两个表;给我一个这样的结果:

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);