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

我有 3 张桌子。

sheets TABLEsheet_id
brand_id
sheet_color
sheet_code
adhesive_id_1
adhesive_id_2
adhesive_id_3
factor_1
factor_2
factor_3
sheet_brands TABLE
brand_id
brand_name
surface_type_id
adhesives TABLE
adhesive_id
match_code
match_name

我需要匹配:

1) sheets.brand_id 到 sheet_brands.brand_id 得到brand_name

2) sheets.adhesive_id_1 to adhesives.adhesive_id 得到match_code和match_name

3) 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";



弑天下
浏览 114回答 2
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 sLEFT JOIN sheet_brands sb ON sb.brand_id = s.brand_id LEFT JOIN adhesives a1 ON a1.adhesive_id = s.adhesive_id_1LEFT JOIN adhesives a2 ON a2.adhesive_id = s.adhesive_id_2LEFT JOIN adhesives a3 ON a3.adhesive_id = s.adhesive_id_3

肥皂起泡泡

您必须加入表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_name2FROM sheets sLEFT JOIN sheet_brands b ON b.brand_id = s.brand_id LEFT JOIN adhesives a1 ON a1.adhesive_id = s.adhesive_id_1LEFT 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_name3FROM sheets sLEFT JOIN sheet_brands b ON b.brand_id = s.brand_id LEFT JOIN adhesives a1 ON a1.adhesive_id = s.adhesive_id_1LEFT JOIN adhesives a2 ON a2.adhesive_id = s.adhesive_id_2LEFT JOIN adhesives a3 ON a3.adhesive_id = s.adhesive_id_3
打开App,查看更多内容
随时随地看视频慕课网APP