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 в результатах я получаю строки, которые имеют идеальное совпадение между первым, вторым и последним именами, но имеет другую дату регистрации - поскольку мы не рассматриваем дату регистрации в запросе, повлияет ли он на результаты?
Ответы
Ответ 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";