【问题标题】:Merging two tables using SQL使用 SQL 合并两个表
【发布时间】:2021-10-20 16:14:45
【问题描述】:

我有两个表需要合并。

表一是:

ID Product code Spend
1 101 100
1 102 200
1 103 300
2 201 400
3 301 500
3 302 600

表 2 有

ID Product code Spend Product tenure
1 101 100 20
1 102 200 30
3 302 600 40

我想合并这些,以便从表 1 中仅保留表 2 中存在的 ID。表 2 不包含每个 ID 的所有产品代码,但我希望我的最终表有它。

输出必须有

ID Product code Spend Product tenure
1 101 100 20
1 102 200 30
1 103 300
3 301 500
3 302 600 40

对此的任何帮助将不胜感激。我在 ID 上尝试了左连接,但它产生了许多重复项。

【问题讨论】:

  • 我有两个表需要合并。将它们作为 CREATE TABLE 和 INSERT INTO 脚本的组合提供。

标签: mysql


【解决方案1】:
SELECT  *,
    (
        SELECT `product_tenure` 
        FROM `second_table` 
        WHERE `second_table`.`id` = `first_table`.`id` 
        AND `first_table`.`product_code` = `second_table`.`product_code`
    ) product_tenure
FROM    `first_table`
WHERE   `id` IN (SELECT DISTINCT `id` FROM `second_table`)

说明:

second table 中选择id,它希望从第一个表中获得to keep

因为product_tenure 仅在second_table 中选择它们并结合idproduct_code

结果:

【讨论】:

  • 感谢您的回复!
  • 有没有办法可以避免子查询,因为我在 hive 中工作并且它不支持它。
  • 哦,目前我还没有 hive 方面的经验。请在下面尝试Akina的答案。正如他在 PS 上所说,它需要指定 Select 列。笔记。
【解决方案2】:

测试一下:

SELECT *
FROM t1
LEFT JOIN t2 AS t21 USING (ID, `Product code`)
WHERE EXISTS ( SELECT NULL
               FROM t2 AS t22
               WHERE t1.ID = t22.ID )

PS。该查询将返回 2 个 Spent 列(它们存在于每个表中,并且没有什么可以阻止它们的值不相等......) - 所以用明确的列列表替换一个星号。

【讨论】:

    猜你喜欢
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    相关资源
    最近更新 更多