Подтвердить что ты не робот

SQL Как добавить, если условия else в sql

Таблица A состоит из firstname, secondname, lastname, msisdn, registrationdate.. table b имеет имя, имя, фамилию, 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 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

else показывают все записи как результаты, которые не попадают ни в один из перечисленных выше случаев. Также, если это возможно, пожалуйста, включите решение, чтобы игнорировать заглавные буквы и маленькие буквы при проверке несоответствий.

Пожалуйста, найдите образцы данных здесь проблема заключается в том, что после выполнения запроса из @sagi в результатах я получаю строки, которые имеют идеальное совпадение между первым, вторым и последним именами, но имеет другую дату регистрации - поскольку мы не рассматриваем дату регистрации в запросе, повлияет ли он на результаты?

4b9b3361

Ответ 1

Это должно сделать трюк:

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.

Ответ 2

Вероятно, вы хотите использовать выражение CASE.

Они выглядят так:

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

Ответ 3

Это сделает это. В основном вам просто нужно исключить результаты, в которых совпадают как имя, так и второе/последнее.

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))

Ответ 4

Вы можете использовать CASE для создания IF, а затем Query.

Согласно Док CASE используется для предоставления логического типа if-then-else для SQL. Существует два формата: первый - это простое выражение CASE, где мы сравниваем выражение со статическими значениями. Второй - это выражение Searched CASE, в котором мы сравниваем выражение с одним или несколькими логическими условиями.

Пример

SELECT CASE ("column_name") 
  WHEN "value1" THEN "result1" 
  WHEN "value2" THEN "result2" 
  ... 
  [ELSE "resultN"] 
  END
FROM "table_name";