簡體   English   中英

在不復制SQLite JDBC中的列的情況下獲得完全的外部聯接效果

[英]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 ,因此消除了重復項。 這也假定唯一具有共同名稱的列是idname

我通常用於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM