[英]How to merge two sql tables where B is a subset of A and should override A?
表A(没有唯一的表)
╔══════╦══════╦═══════════╦═══════════════╗
║ p_id ║ l_id ║ p_name ║ p_description ║
╠══════╬══════╬═══════════╬═══════════════╣
║ 212 ║ 1 ║ Ball ║ Red ║
║ 212 ║ 2 ║ Balle ║ Rouge ║
║ 301 ║ 1 ║ Horn name ║ Blue ║
╚══════╩══════╩═══════════╩═══════════════╝
表B(p_id是唯一的)
╔══════╗
║ p_id ║
╠══════╣
║ 101 ║
║ 201 ║
║ 210 ║
║ 212 ║
║ 234 ║
║ 250 ║
║ 301 ║
║ 320 ║
╚══════╝
关于p_id,表A是表B的子集(所有p_id应该存在于表B中),但表A包含不同的数据。 这两个表都包含许多我未显示的列。 对于表A,我只关心p_id。 对于表BI,要消除基于l_id的重复项。 始终会有一个l_id为1的条目,但是可能有也可能没有其他条目应被丢弃(即,应该在简单的WHERE l_id = 1中进行)。
结果应该是一个表,该表具有表B的每个p_id(一次)和表A的每一列。大多数行在其他列中都没有数据,因为它们在表B中不存在。所以我应该例如:
╔══════╦══════╦═══════════╦═══════════════╗
║ p_id ║ l_id ║ p_name ║ p_description ║
╠══════╬══════╬═══════════╬═══════════════╣
║ 101 ║ ║ ║ ║
║ 201 ║ ║ ║ ║
║ 210 ║ ║ ║ ║
║ 212 ║ 1 ║ Ball ║ Red ║
║ 234 ║ ║ ║ ║
║ 250 ║ ║ ║ ║
║ 301 ║ 1 ║ Horn name ║ Blue ║
║ 320 ║ ║ ║ ║
╚══════╩══════╩═══════════╩═══════════════╝
从您的描述来看,这听起来像是left join
:
select b.p_id, a.l_id, a.p_name, a.p_description
from b left join
a
on b.p_id = a.p_id and a.l_id = 1;
要从一个表中获取所有行,并从另一个表中获取匹配某个条件的行,可以使用left join
:
select b.p_id, a.l_id, a.p_name, a.p_description
from b
left join a on b.p_id = a.p_id and a.l_id = 1
这将使您从B获得所有内容,并获得A中符合where条件的列的值。 对于B中没有任何匹配项的那些行,您将获得null
值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.