如何解决SQL表联接
我要加入这三个表,但是相同的信息会显示3次...知道如何仅显示由唯一的货件ID确定的唯一行吗?
SELECT S.SHIPMENT_ID,S.CREATION_DATE,S.BUSINESS_ID,B.BUS_ID,S.SHIPMENT_STATUS,S.BUSINESS_NAME,S.SHIPMENT_MODES,S.CUSTOMER_NAME
FROM "SHIPMENT" S
INNER JOIN "BUSINESS" B ON S.BUSINESS_ID=B.BUS_ID
INNER JOIN "SHIPMENT_GROUP" SG ON S.SHIPMENT_ID=SG.SHIPMENT_ID
INNER JOIN "DATA_GROUP" DG ON DG.ID=SG.GROUP_ID
解决方法
尝试选择不同
SELECT DISTINCT列1,列2,... FROM table_name;
,您仅从第一张表中选择行,因此这表明您正在使用联接进行过滤。
如果是这样,则可以使用exists
进行重写,如果有多个匹配项,它将避免重复。从您现有的查询开始,逻辑将是:
select s.*
from shipment s
where
exists (
select 1
from business b
where b.bus_id = s.business_id
) and exists (
select 1
from shipment_group sg
inner join data_group dg on dg.id = sg.group_id
where sg.shipment_id = s.shipment_id
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。