如何正确连接tbl_Item与tbl_conversion表并获取对应商品名称?
正确SQL写法及错误原因解析
错误原因
你写的子查询没有限定只匹配当前行的Item_Code,当tbl_conversion有多条记录时,子查询会返回所有符合JOIN条件的Item_Name集合,但作为字段表达式的子查询必须返回单个值,因此触发报错:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
正确写法
方法1:两次LEFT JOIN关联表(推荐,可读性更高)
通过两次关联tbl_Item表,分别匹配Item_Code1和Item_Code2,直接获取对应的名称:
SELECT tc.*, ti1.Item_Name AS Item_Name1, ti2.Item_Name AS Item_Name2 FROM tbl_conversion tc LEFT JOIN tbl_Item ti1 ON tc.Item_Code1 = ti1.Item_Code LEFT JOIN tbl_Item ti2 ON tc.Item_Code2 = ti2.Item_Code
使用LEFT JOIN可以保证即使Item_Code1或Item_Code2在tbl_Item中没有匹配记录,也能保留tbl_conversion的原始行,对应名称字段会显示为NULL。
方法2:关联子查询
给子查询添加WHERE条件,关联外层查询当前行的Item_Code,确保子查询只返回单个值:
SELECT *, (SELECT Item_Name FROM tbl_Item WHERE Item_Code = tc.Item_Code1) AS Item_Name1, (SELECT Item_Name FROM tbl_Item WHERE Item_Code = tc.Item_Code2) AS Item_Name2 FROM tbl_conversion tc
这种写法适合只需要获取单个字段的场景,逻辑更聚焦。
内容的提问来源于stack exchange,提问作者Herry Abu
相关产品推荐
相关产品推荐

