Je suis assez sûr que la jointure ne même pas faire ce que vous voulez. S'il y a 100 enregistrements dans la table a avec un qid nul et 100 enregistrements dans la table b avec un qid nul, alors la jointure comme écrite devrait faire une jointure croisée et donner 10 000 résultats pour ces enregistrements. Si vous regardez le code suivant et exécutez les exemples, je pense que le dernier est probablement plus le jeu de résultats que l'intention:
create table #test1 (id int identity, qid int)
create table #test2 (id int identity, qid int)
Insert #test1 (qid)
select null
union all
select null
union all
select 1
union all
select 2
union all
select null
Insert #test2 (qid)
select null
union all
select null
union all
select 1
union all
select 3
union all
select null
select * from #test2 t2
join #test1 t1 on t2.qid = t1.qid
select * from #test2 t2
join #test1 t1 on isnull(t2.qid, 0) = isnull(t1.qid, 0)
select * from #test2 t2
join #test1 t1 on
t1.qid = t2.qid OR (t1.qid IS NULL AND t2.qid IS NULL)
select t2.id, t2.qid, t1.id, t1.qid from #test2 t2
join #test1 t1 on t2.qid = t1.qid
union all
select null, null,id, qid from #test1 where qid is null
union all
select id, qid, null, null from #test2 where qid is null
Pour quelle base de données (y compris la version)? –
Seuls SQL Server et Access ont 'ISNULL()', donc je supposerais SQL Server –
Base de données: sql 2005 – Rico