为了账号安全,请及时绑定邮箱和手机立即绑定

将同一表中的 2 列匹配到另一个表中的同一列(总共 3 个连接)

将同一表中的 2 列匹配到另一个表中的同一列(总共 3 个连接)

PHP
弑天下 2023-03-04 17:07:02
我有 3 张桌子。sheets TABLEsheet_id brand_id sheet_color sheet_code adhesive_id_1 adhesive_id_2 adhesive_id_3 factor_1 factor_2 factor_3sheet_brands TABLE brand_id brand_name surface_type_idadhesives TABLE adhesive_id match_code match_name我需要匹配:1) sheets.brand_id 到 sheet_brands.brand_id 得到brand_name2) sheets.adhesive_id_1 to adhesives.adhesive_id 得到match_code和match_name3) sheets.adhesive_id_2 to adhesives.adhesive_id 得到match_code和match_name我花了一段时间搜索,但没有找到有效的解决方案。我相信这种类型的 JOIN 是独一无二的,因为我需要将同一个表中的 2 列匹配到另一个表中的同一列。这是我最接近解决问题的时间,但它只匹配第一个 adhesive_id_1。它与 adhesive_id_2 或 adhesive_id_3 不匹配。$sql = "SELECT sheet_color, sheet_code, factor_1, factor_2, brand_name, match_code, match_name FROM sheets LEFT JOIN sheet_brands ON sheet_brands.brand_id = sheets.brand_id LEFT JOIN adhesives ON adhesives.adhesive_id = sheets.adhesive_id_1";
查看完整描述

2 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

您需要对adhesives源表中的每一列进行一个连接,如下所示:


SELECT 

    s.sheet_color, 

    s.sheet_code, 

    s.factor_1, 

    s.factor_2, 

    sb.brand_name, 

    a1.match_code match_code_1, 

    a1.match_name match_name_1,

    a2.match_code match_code_2, 

    a2.match_name match_name_2,

    a3.match_code match_code_3, 

    a3.match_name match_name_3  

FROM sheets s

LEFT JOIN sheet_brands sb ON sb.brand_id = s.brand_id 

LEFT JOIN adhesives a1 ON a1.adhesive_id = s.adhesive_id_1

LEFT JOIN adhesives a2 ON a2.adhesive_id = s.adhesive_id_2

LEFT JOIN adhesives a3 ON a3.adhesive_id = s.adhesive_id_3


查看完整回答
反对 回复 2023-03-04
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

您必须加入表adhesives两次才能同时获得match_codes 和match_names:


SELECT s.sheet_color, s.sheet_code, s.factor_1, s.factor_2, 

       b.brand_name, 

       a1.match_code match_code1, a1.match_name match_name1,

       a2.match_code match_code2, a2.match_name match_name2

FROM sheets s

LEFT JOIN sheet_brands b ON b.brand_id = s.brand_id 

LEFT JOIN adhesives a1 ON a1.adhesive_id = s.adhesive_id_1

LEFT JOIN adhesives a2 ON a2.adhesive_id = s.adhesive_id_2

为表使用别名并使用这些别名限定列名。

如果您还想要并且match_code因为match_name您adhesive_id_3将需要再加入一个:


SELECT s.sheet_color, s.sheet_code, s.factor_1, s.factor_2, 

       b.brand_name, 

       a1.match_code match_code1, a1.match_name match_name1,

       a2.match_code match_code2, a2.match_name match_name2,

       a3.match_code match_code3, a3.match_name match_name3

FROM sheets s

LEFT JOIN sheet_brands b ON b.brand_id = s.brand_id 

LEFT JOIN adhesives a1 ON a1.adhesive_id = s.adhesive_id_1

LEFT JOIN adhesives a2 ON a2.adhesive_id = s.adhesive_id_2

LEFT JOIN adhesives a3 ON a3.adhesive_id = s.adhesive_id_3


查看完整回答
反对 回复 2023-03-04
  • 2 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信