ロジックを間違えたかどうかはわかりません。
クエリがあり、null値で内部結合を行うと、常に結果が得られないか、結合を無視して成功しますか?例
user { id PK, name NVARCHAR NOT NULL, banStatus nullable reference }
私が書き込み、u.banStatusの場合、行を受け取りませんか?
select * from user as u
join banstatus as b on u.banStatus=b.id
where id=1
結合がnullの場合、NULLはNULLであっても何にも等しくないため、行は取得されません。
LEFT JOINに変更すると、行が取得されます。
内部結合あり:
select * from user as u
join banstatus as b on u.banStatus=b.id
1, '1', 1, 'Banned'
左結合で:
select * from user as u
left join banstatus as b on u.banStatus=b.id
1, '1', 1, 'Banned'
2, 'NULL', , ''
このテストデータの使用:
CREATE TABLE user (id int, banstatus nvarchar(100));
INSERT INTO user (id, banstatus) VALUES
(1, '1'),
(2, 'NULL');
CREATE TABLE banstatus (id int, text nvarchar(100));
INSERT INTO banstatus (id, text) VALUES
(1, 'Banned');
INNER JOIN
、NULL
の値は何とも一致しません。お互いにでも。これが、クエリが行を返さない理由です。 ( ソース )
これはnullの内部結合です(Oracle構文)。
select *
from user
uu
join banstatus
bb
on uu.banstatus = bb.id
or
uu.banstatus is null and bb.id is null