繁体   English   中英

如何合并两个SQL表,其中B是A的子集,并且应该覆盖A?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM