【问题标题】:left join where the primary key has both integer and string主键同时具有整数和字符串的左连接
【发布时间】:2020-05-14 08:37:31
【问题描述】:

我需要连接两个主键同时具有整数和字符串值的表。当我使用 id 列作为主键的左连接时,我只获取与整数相关的记录。我想获得整数和字符串的输出,如输出所示。任何人都可以帮忙吗?

选择 t1.* ,t2.位置 从 t1 左连接 t2 在 t1.id=t2.id;

我得到的输出仅与 id(整数)有关。我想得到整数 id 和字符串 id 的输出。

【问题讨论】:

  • 这不是 JOIN,这是 UNION DISTINCT。并且必须是字符串类型数据的表,否则必须将列转换为最上层 UNION 的子查询中的字符串数据类型。当然,所有最终列值(包括“数字”)都将具有字符串数据类型。
  • @Akina,这里如何使用 UNION DISTINCT

标签: google-bigquery


【解决方案1】:

如何在这里使用 UNION DISTINCT – Nrad

SELECT id FROM table1
UNION DISTINCT
SELECT id FROM table2

或

SELECT CAST(id AS CHAR) AS id FROM table2
UNION DISTINCT
SELECT id FROM table1

DISTINCT 关键字是可选的,在这两种情况下都可以跳过。

如果您需要显示的顺序,请添加

ORDER BY id + 0 = 0, id

到查询的结尾。


我需要在两个表中使用其他一些不同的列。 – Nrad

SELECT id, 
       COALESCE (t1.name, t2.name) name, 
       t1.salary, 
       t2.position, 
       t1.department
FROM ( SELECT id FROM table1
       UNION DISTINCT
       SELECT id FROM table2 ) t0
LEFT JOIN table1 t1 USING (id)
LEFT JOIN table2 t2 USING (id)

【讨论】:

  • @Akina,我在两个表中还有一些其他不同的列需要使用。我想在这种情况下我不能使用联合。我想使用左连接。你能给我一个提示吗?
  • @Nrad 创建新问题并发布真实任务,使用真实的结构和数据示例(以文本形式,而不是图片!!!如果需要,请混淆),而不是未充分简化的模型。 我想使用 LEFT JOIN。 使用...但在 SHOWN 情况下无法解决。
  • @Akina,很抱歉造成混乱。我已经更新了输入表和预期输出表。我没有决心使用左连接。无论哪种解决方案是最好的,请提供帮助。
  • @Nrad 请将屏幕截图替换为 CREATE TABLE + INSERT INTO 脚本,其中包含一些示例数据(2-3 条记录,所有列均已填充),并显示此数据的所需结果。并告诉/显示如果不同表中相同的id 有不同的name 值怎么办(不要说这是不可能的 - 或者通过保证这一点的约束来证明这一点)。
  • @Akina,我已经添加了查询。你能看看吗。
猜你喜欢
  • 2017-05-21
  • 2021-12-20
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多