它可能已经得到了解答,但我找不到我想要的东西。这是一个新问题。
我正在尝试使用以下语法在SQLite JDBC中创建Full OUTER JOIN。
我试过的SQLite查询:
SELECT table1.*, table2.*
FROM table1
LEFT JOIN table2
ON table1.ID = table2.ID
AND
table1.Name = table2.Name
UNION ALL
SELECT table1.*, table2.*
FROM table2
LEFT JOIN table1
ON table1.ID = table2.ID
AND
table1.Name = table2.Name
然后它会产生重复的列(如在Full Outer Join中所预期的那样)。但是,只获得那些重复列的一个实例,即没有重复列的Union,这将是很好的。
更多说明:我需要的是从两个表中获取所有列,但重复重复的列。
任何建议都会有所帮助。
答案 0 :(得分:1)
我认为您可以为此目的使用using
子句:
SELECT *
FROM table1 LEFT JOIN
table2
USING(ID, Name)
UNION
SELECT *
FROM table2 LEFT JOIN
table1
USING(ID, Name);
请注意,正确的等效项使用union
而不是union all
,因此会删除重复项。这也假设只有具有通用名称的列为id
和name
。
我通常用于full outer join
的方法略有不同:
select *
from (select id, name from table1 union
select id, name from table2
) driver left join
table1
using (id, name) left join
table2
using (id, name);
答案 1 :(得分:1)
没有SQL语法可以选择除某些列
之外的所有列select * except id, name -- can't do this
您必须明确命名其中一个表的所有其他列:
SELECT table1.*, table2.col1, table2.col2, table2.col3 -- etc
FROM table1
LEFT JOIN table2
ON table1.ID = table2.ID
AND table1.Name = table2.Name
UNION ALL
SELECT table1.*, table2.col1, table2.col2, table2.col3 -- etc
FROM table2
LEFT JOIN table1
ON table1.ID = table2.ID
AND table1.Name = table2.Name
答案 2 :(得分:0)
感谢@Gordon Linoff answer,我能够完全达到我所需要的水平。 缺少神奇的语法是 USING
这是:
SELECT * FROM Table1
LEFT JOIN Table2
USING (ID, Name)
这确实为我提供了两个表中的所有列,而不重复重复的列。