SQL如何在sql中添加if else条件

时间:2016-09-14 07:45:13

标签: mysql sql if-statement

表A由firstname,secondname,lastname,msisdn,registrationdate组成..表b包含firstname,secondname,lastname,msisdn,registrationdate和其他一些列 - 但我只想考虑这些提到的5列。 我有类似的东西

SELECT SELECT A.MSISDN,A.FIRSTNAME,A.SECONDNAME,A.LASTNAME,A.REGDATE, B.MSISDN,B.FIRSTNAME,B.SECONDNAME,B.LASTNAME,B.REGDATE 
FROM TABLE1 A
INNER JOIN TABLE2 B ON A.MSISDN = B.MSISDN
WHERE A.FIRSTNAME != B.FIRSTNAME 
OR A.LASTNAME != B.LASTNAME

以前我只考虑表A中的名字,姓氏并检查表B中的不匹配,但我得到了数千条记录作为结果,我想缩小搜索范围。

如何在此处添加if else案例以便

if a.firstname == b.firstname && a.secondname == b.lastname - Ignore this record.

if a.firstname == b.firstname && a.lastname == b.lastname - Ignore this record.

if a.firstname == b.firstname && a.lastname == b.secondname- Ignore this record.

if a.firstname not equal to b.firstname - show this record as result

if a.firstname == b.firstname && a.secondname not equal to b.lastname - show this record as result

否则将所有记录显示为不属于上述任何一种情况的结果。如果可能,请在检查不匹配时包括忽略大写字母和小写字母的解决方案。

Please find the sample data here 这里的问题是,在执行来自@sagi的查询后,在结果中我得到的行在第一个,第二个和最后一个名字之间完全匹配但具有不同的注册日期 - 因为我们没有考虑注册日期在查询,会影响结果吗?

4 个答案:

答案 0 :(得分:11)

这应该可以解决问题:

SELECT A.*, B.* 
FROM TABLE1 A
INNER JOIN TABLE2 B ON A.MSISDN = B.MSISDN
WHERE (UPPER(B.FIRSTNAME),UPPER(B.LASTNAME)) NOT IN ((UPPER(A.FIRSTNAME),UPPER(A.LASTNAME)),(UPPER(A.FIRSTNAME),UPPER(A.SECONDNAME)))

无需IF,如果此条件返回true,则表示您满足所有条件,且first_name不同或last_name为。

答案 1 :(得分:4)

您可能想要使用CASE表达式。

他们看起来像这样:

SELECT col1, col2, (case when (action = 2 and state = 0) 
 THEN
      1 
 ELSE
      0 
 END)
 as state from tbl1;

答案 2 :(得分:4)

这样做。基本上你只需要排除firstname和second / lastname都匹配的结果。

SELECT A.*, B.* 
FROM TABLE1 A
INNER JOIN TABLE2 B ON A.MSISDN = B.MSISDN
WHERE (NOT (A.FIRSTNAME = B.FIRSTNAME AND A.SECONDNAME = B.LASTNAME))
AND (NOT (A.FIRSTNAME = B.FIRSTNAME AND A.LASTNAME = B.LASTNAME))

答案 3 :(得分:3)

您可以使用SELECT CASE ("column_name") WHEN "value1" THEN "result1" WHEN "value2" THEN "result2" ... [ELSE "resultN"] END FROM "table_name"; 草拟IF,然后像Query一样。

根据文件 CASE用于为SQL提供if-then-else类型的逻辑。有两种格式:第一种是Simple CASE表达式,我们将表达式与静态值进行比较。第二个是Searched CASE表达式,我们将表达式与一个或多个逻辑条件进行比较。

实施例

@Pattern(regexp = Constants.LOGIN_PATTERN)
@Size(min = 4, max = 50)
private String login;