如何在SQL Inner Join的ON子句中用一列匹配两列?
解决方案:在INNER JOIN的ON子句中匹配两列
当然可以实现!你完全能在INNER JOIN的ON条件里,让你的序列号列同时匹配关联表中的Serial#1和Serial#2列——只需要用OR运算符把两个匹配条件连起来就行。
举个具体的例子,假设你的主表(存有序列号的表)叫serial_records,列名是serial_key_number;关联的账户表叫account_serials,结构就是你给出的那样:
SELECT sr.serial_key_number, asr.`account #`, asr.`Serial#1`, asr.`Serial#2` FROM serial_records sr INNER JOIN account_serials asr -- 核心条件:匹配Serial#1 或者 Serial#2 ON sr.serial_key_number = asr.`Serial#1` OR sr.serial_key_number = asr.`Serial#2`;
注意事项:
- 因为你的列名包含空格(比如
account #),记得用反引号(MySQL)或者方括号(SQL Server)把列名括起来,避免语法错误。 - 如果某个序列号同时出现在同一账户的
Serial#1和Serial#2里,这条记录会被返回两次。如果想避免重复,可以在SELECT后面加上DISTINCT,或者调整逻辑过滤重复项。 - 这种
OR条件可能会影响查询性能,如果数据量很大,建议考虑给Serial#1和Serial#2分别建立索引,或者重构表结构(比如把序列号拆成单独的关联表,一个账户对应多行序列号),这样查询效率会更高。
内容的提问来源于stack exchange,提问作者Louis Carmichael
相关产品推荐
相关产品推荐

