主键同时具有整数和字符串的左连接
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,我已经添加了查询。你能看看吗。以上是关于主键同时具有整数和字符串的左连接的主要内容,如果未能解决你的问题,请参考以下文章
小白知识:数据库表主键ID生成策略及snowflake雪花算法的由来