Как найти строку, в которой одна таблица имеет значения NULL, а другая - значения - PullRequest
0 голосов
/ 28 января 2012

Я пытаюсь написать скрипт, который выдаст мне отдельные строки из таблицы, которая имеет значение NULL в таблице A, но для тех же столбцов таблица B имеет значения.

Сценарий: у меня есть 2 таблицы: Таблица A и Таблица B имеют одинаковые столбцы

Значения в таблице A

| ID | Name      | LicenseNo | NationalLicenseNumber |
| 1  | 'ABC,XYZ' |  NULL     | NULL                  |
| 1  | 'CDS,ABD' |  NULL     | NULL                  |

Таблица B имеет такие значения, как:

| 1  | 'XYZ ABC' | 1234567   | 976633                |
| 1  | 'ABD CDS' | 4324223   | 304242                |

и так далее ... Я хочу отобразить результат, который показывает мне значение во всех столбцах обеих таблиц. Любая помощь будет оценена Спасибо

Ответы [ 3 ]

1 голос
/ 28 января 2012

Попробуйте выбрать:

select a.ID,a.Name,a.LicenseNo,a.NationalLicenseNumber,
       b.ID,b.Name,b.LicenseNo,b.NationalLicenseNumber
from TableA a
left outer join TableB b on a.ID=b.ID
where
    ((a.Name is null) and (b.Name is not null))
or  ((a.Name is not null) and (b.Name is null))
    ((a.LicenseNo is null) and (b.LicenseNo is not null))
or  ((a.LicenseNo is not null) and (b.LicenseNo is null))
    ((a.NationalLicenseNumber is null) and (b.NationalLicenseNumber is not null))
or  ((a.NationalLicenseNumber is not null) and (b.NationalLicenseNumber is null))

Объединяет обе таблицы на ID и сохраняет только те строки, в которых значения соответствующих столбцов различны.EDIT Заменено (a.Name is null) <> (b.Name is null), которое вызывает синтаксические ошибки с более длинным выражением, которое не сравнивает логические значения.

0 голосов
/ 28 января 2012

Это будет работать.Кроме того, он решает проблему второго набора столбцов с одинаковыми именами, которые возвращаются просто как «Expr_1», «Expr_2» и т. Д., Используя псевдоним columnNames таблицы TableB.Это возвращает все строки в TableB (которые, согласно вашей публикации, содержат все правильные значения) и соединяет их в поле идентификатора со строками в TableA (которые, как вы говорите, могут иметь строки со значениями NULL в любом из других полей).Это вернет записи для обеих таблиц, в которых совпадают идентификаторы, и где одно или несколько связанных полей в TableA равны нулю.

SELECT     
    a.ID, 
    a.Name, 
    a.LicenseNo, 
    a.NationalLicenseNo, 
    b.ID AS b_ID, 
    b.Name AS b_Name, 
    b.LicenseNo AS b_LicenseNo, 
    b.NationalLicenseNo AS b_NationalLicenseNo
FROM         
    TableA AS a RIGHT OUTER JOIN
    TableB AS b ON a.A = b.A
WHERE     
    (a.Name IS NULL) OR
    (a.LicenseNo IS NULL) OR
    (a.NationalLicenseNo IS NULL)
0 голосов
/ 28 января 2012

Попробуйте просто проверить, если не ноль:

SELECT *
FROM   TABLE_A 
WHERE  Name IS NOT NULL AND LicenseNo IS NOT NULL AND NationalLicenseNumber IS NOT NULL
UNION 
SELECT *
FROM   TABLE_B
WHERE  Name IS NOT NULL AND LicenseNo IS NOT NULL AND NationalLicenseNumber IS NOT NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...