[英]Achieve Full Outer Join Effect Without Duplicating Columns In SQLite JDBC
它可能已經回答了,但是我找不到想要的東西。 所以是一個新問題。
我正在嘗試使用以下語法在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
然后,它會產生重復的列(不過與“完全外部聯接”中的預期一樣)。 但是,最好只獲得那些重復列的一個實例,即Union而沒有重復列。
更多說明:我需要從兩個表中獲取所有列,但重復重復的列除外。
任何建議都會有很大幫助。
我認為您可以為此使用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);
沒有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
感謝@Gordon Linoff的回答 ,我能夠實現我所需要的一切。 缺少神奇的語法是使用
這里是:
SELECT * FROM Table1
LEFT JOIN Table2
USING (ID, Name)
這確實為我提供了兩個表中的所有列,而無需重復重復的列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.