加入两个不同的表的列sqlite3

时间:2013-10-14 09:16:57

标签: sql sqlite android-sqlite

你有两个表,一个表包含名为

的列

表A.  _id,Eng,Hindi

其他表包含

表B.  _id,Eng,Hindi

我希望通过匹配单词与Eng 来加入两个表格如果Eng单词不匹配则会将其添加到表A中,而表A中的表格A将保留

例如

现在表B

enter image description here

表A

enter image description here

结果将在表A上

enter image description here

2 个答案:

答案 0 :(得分:2)

FULL JOIN是组合多个表中的行的术语。不适用于您的需求。

您只需要在表a中插入表b中不在表a中的所有条目。

INSERT INTO TABLE a(Eng, Hindi) SELECT Eng, Hindi FROM b WHERE eng NOT IN (SELECT eng FROM a);

答案 1 :(得分:1)

如果您只想获得(SELECT)所需的输出,TableA可以包含TableB中不存在的记录,那么您可以模仿FULL JOIN来实现目标

SELECT e.eng, COALESCE(a.hindi, b.hindi) hindi
  FROM
(
  SELECT eng FROM TableB 
   UNION 
  SELECT eng FROM TableA
) e LEFT JOIN TableB b 
    ON e.eng = b.eng LEFT JOIN TableA a
    ON e.eng = a.eng

如果另一方面TableA 始终仅包含eng TableB值的子集,那么您可以使用LEFT JOIN

SELECT b.eng, COALESCE(a.hindi, b.hindi) hindi
  FROM TableB b LEFT JOIN TableA a
    ON b.eng = a.eng

这是 SQLFiddle 演示


现在,如果您想更新TableA的内容并假设A_idAUTOINCREMENT,您可以

INSERT INTO TableA (eng, hindi)
SELECT b.eng, b.hindi
  FROM TableB b LEFT JOIN TableA a
    ON b.eng = a.eng
 WHERE a.eng IS NULL

这是 SQLFiddle 演示

INSERT INTO TableA (eng, hindi)
SELECT b.eng, b.hindi
  FROM TableB b
 WHERE NOT EXISTS
(
  SELECT * 
    FROM TableA
   WHERE eng = b.eng
);

这是 SQLFiddle 演示