主键同时具有整数和字符串的左连接

Posted

技术标签:

【中文标题】主键同时具有整数和字符串的左连接【英文标题】: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 这能回答你的问题吗? Joining tables where primary key are both interger and string 【参考方案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,我已经添加了查询。你能看看吗。

以上是关于主键同时具有整数和字符串的左连接的主要内容,如果未能解决你的问题,请参考以下文章

在 Hibernate 中持久化对象,同时具有已知的主键。

显示具有多个需要累积的值的左连接

如何比较具有字符串和整数的列?蟒蛇熊猫

小白知识:数据库表主键ID生成策略及snowflake雪花算法的由来

快速 SQL 问题:在 H2 中创建具有主键的表的正确语法?

LINQ:具有多个条件的左外连接