You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过两个外键关联主表与另一张表实现SQL JOIN查询?

问题描述

我有两张表结构如下:

TABLE1(主表)

ITEM_ID (PK)ITEM_NAMEITEM_PRICE
1橙子123
2苹果321
3香蕉131
4甜瓜312

TABLE2

CART_ID (PK)CART_NAMEITEM1_FK (FK1)ITEM2_FK (FK2)
11购物车1113
16购物车1622
85购物车8534
96购物车9641

TABLE2的两个外键ITEM1_FK、ITEM2_FK均指向TABLE1的主键ITEM_ID。我需要编写一条SELECT语句,关联两张表得到如下格式的结果:

期望结果

CART_ID (PK)CART_NAMEITEM1_NAMEITEM1_PRICEITEM2_NAMEITEM2_PRICE
11购物车11橙子123香蕉131

我尝试用INNER JOIN关联两个外键,但总是遇到列名歧义错误,或者查询出的ITEM_NAME和ITEM_PRICE字段值完全相同。


解决方案

你需要两次关联TABLE1,并给每次关联的TABLE1设置不同的别名,同时给查询的字段指定别名,避免列名冲突。

正确的SQL语句如下:

SELECT 
    t2.CART_ID,
    t2.CART_NAME,
    t1a.ITEM_NAME AS ITEM1_NAME,
    t1a.ITEM_PRICE AS ITEM1_PRICE,
    t1b.ITEM_NAME AS ITEM2_NAME,
    t1b.ITEM_PRICE AS ITEM2_PRICE
FROM TABLE2 t2
INNER JOIN TABLE1 t1a ON t2.ITEM1_FK = t1a.ITEM_ID
INNER JOIN TABLE1 t1b ON t2.ITEM2_FK = t1b.ITEM_ID
-- 如需筛选特定购物车,可添加WHERE条件,比如只查购物车11
WHERE t2.CART_ID = 11;

关键点说明:

  • 给TABLE1设置两个不同的别名t1a和t1b,分别对应ITEM1_FK和ITEM2_FK的关联,这样就能区分两个关联的表数据。
  • 给查询的ITEM_NAME和ITEM_PRICE字段设置别名(AS ITEM1_NAME、AS ITEM2_PRICE等),确保结果列名符合需求,同时避免因为两个TABLE1有相同列名导致的歧义。
  • 如果不需要筛选特定购物车,去掉最后的WHERE条件即可得到所有购物车的关联结果。

内容的提问来源于stack exchange,提问作者Victor314

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:36:25