SQL - 连接语句的例外

Posted

技术标签:

【中文标题】SQL - 连接语句的例外【英文标题】:SQL - EXCEPTION TO A JOIN STATEMENT 【发布时间】:2015-02-20 15:34:56 【问题描述】:

我想加入两张桌子。一个具有货币参考,另一个具有货币参考的名称。这就像一个常规的内部连接练习,但有一个例外。第一个表中0的货币参考实际上是另一个表中的160。如何操纵我的 join 语句来解决这个问题?

表 1

       CREDIT TYPE               TRCURR
          CAR LOAN                    0
     CONSUMER LOAN                    0
          CAR LOAN                   20
          CAR LOAN                    1

表 2

  CURRENCYREF     NAME_
            1       EUR
           20       YEN
          160       USD

请注意,所有TRCURR - CURRENCYREF 组合都是正确的,但表 1 中的货币 1600

谢谢!

【问题讨论】:

这是 mysql 还是 sql-server?你们都标记了 它是 SQL 服务器,但我选择了两者,因为这是一个基本的 SQL 问题。感谢您的回复! 【参考方案1】:

您可以在连接语句中使用多个条件,例如:

SELECT *
FROM table1 t1
inner join table2 t2 on t1.trCurr = t2.currencyRef
    or (t1.trCurr = 0 AND t2.currencyRef = 160)

【讨论】:

【参考方案2】:

您可以使用 CASE,例如,先使用 INNER JOIN 语句 所以,它就像:

 select * from (
 select case when tabl.TRCURR = 0 then  '160',
             when tabl.TRCURR = 1 the   '...' end as TRCURR, tabl.* 
 from table_1 tabl) t1
 inner join table_2 t2
 on t1.TRCURR = t2.CURRENCYREF     

类似的东西

【讨论】:

【参考方案3】:

我不知道我是否正确理解了您的要求,但根据我的理解,您可以尝试以下查询以了解您的异常情况,因为它将克服不匹配的 0 = 160 障碍。

SELECT * 
FROM TABLE1 t1
INNER JOIN TABLE1  t2 ON t1.TRCURR = t2.CURRENCYREF OR (t1.TRCURR = 0 AND t2.CURRENCYREF = 160)

谢谢

【讨论】:

以上是关于SQL - 连接语句的例外的主要内容,如果未能解决你的问题,请参考以下文章

Oracle PL/SQL学习之基础篇

无法执行SQL语句

SQL语句replace怎么替换?

MySQL的SQL语句 - 数据操作语句(13)- 子查询(13)

SQL语句中两个表的连接

Oracle(变量定义接收用户输入if语句循环语句)