如何将具有不同字段且需要不同规则的两个表联接在一起?一个例子:
tb_references tb_parts
================== ====================
f_type | f_item f_partID | f_partnumber
------------------ --------------------
YY | ABC123 1 | YYABC123
YY | ABC124 2 | YYABC124
NN | 000111 3 | YY000111
NN | 000112 4 | YY000112
要加入这些,我通常会执行如下查询
SELECT *
FROM tb_references
JOIN tb_parts
ON f_type + f_item = f_partnumber
但是,您会看到f_type
的NN
不匹配,所以我的结果将如下所示:
RESULTS
=============================================
f_type | f_item | f_partID | f_partnumber
---------------------------------------------
YY | ABC123 | 1 | YYABC123
YY | ABC124 | 2 | YYABC124
如何在查询中指定IF语句以使我也匹配损坏的NN
部分?
有点像这种逻辑,但是尽管尝试了各种方法但没有成功,但我不知道如何实现它:
SELECT *
FROM tb_references
JOIN tb_parts
ON
IF (
f_type = 'NN' THEN
'YY' + f_item = f_partnumber
)
ELSE (
f_type + f_item = f_partnumber
)
那么,我的最佳结果将是这样:
RESULTS
=============================================
f_type | f_item | f_partID | f_partnumber
---------------------------------------------
YY | ABC123 | 1 | YYABC123
YY | ABC124 | 2 | YYABC124
NN | 000111 | 3 | YY000111
NN | 000112 | 4 | YY000112
当然,我对在JOIN中未使用IF的其他解决方案持开放态度-这只是我尝试描述我所面临问题的方式。不幸的是,我不能简单地更新“ f_type”字段,因为它是我们无法控制或编辑的第三方数据库。
您可以使用CASE语句。不过,这可能是止痛的明智之举:
SELECT *
FROM tb_references
JOIN tb_parts
ON CASE WHEN f_type='yy' THEN 'zz' ELSE f_type END + f_item = f_partnumber
如果f_partnumber的前缀始终为2,则可以在连接中将它们替换为空字符。