【问题标题】:join on two different table's column sqlite3加入两个不同表的列 sqlite3
【发布时间】:2013-10-14 09:16:56
【问题描述】:

你有一个两个表一个表包含列命名

表 A _id,英语,印地语

其他表包含

表 B _id,英语,印地语

我想通过匹配单词与 Eng 来连接两个表,如果 Eng 单词不匹配,它将被添加到来自表 B 的表 A 中,否则将保留表 A 的值

例如

现在表 B

表 A

结果将在表 A 上

【问题讨论】:

  • 你在 Android 上运行 MySQL 吗?
  • 不能只使用 Sqlite3
  • 您需要实际插入/更新(到)TableA,还是只需要从两个表中获取所需的结果集?如果是前者,那么 A_id 是如何维护的?是auto_increment吗?
  • 我只需要从两个表中获取所需的结果集

标签: sql sqlite android-sqlite


【解决方案1】:

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

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

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

【讨论】:

  • 也非常感谢 LS_dev
【解决方案2】:

如果您只想获得 (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 always 仅包含TableBeng 值的子集,那么您可以只使用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演示

【讨论】:

  • 从 OP 的问题中不清楚 UPDATE 是否真的需要。
  • peterm 我得到了想要的结果,但是表 B 上的数据没有插入到表 A 中(只是在想要的结果上)
  • @SiddhpuraAmit 这是我的问题,您是真的想更新TableA 的内容,还是只需要从两个表中选择所需的结果集?
  • @SiddhpuraAmit 如果您需要更新TableA 的内容,请查看更新的答案以获得可能的解决方案
猜你喜欢
  • 2012-05-29
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多