J'ai une table project p
et une table invoice i
, les deux ont un champ project_id. Je veux un jeu de résultats qui comprend tous les project_ids de project
où i.status = "Active"
et qui comprend également tous les project_ids de invoice
où invoice_date > 2016-01-01
. Voici la requête que j'ai essayée jusqu'ici.SQL OUTER JOIN renvoyant des enregistrements vides - pourquoi?
SELECT
p.project_id
FROM
(SELECT project_id
FROM project
WHERE status = 'Active') p
FULL OUTER JOIN
(SELECT DISTINCT project_id
FROM invoice
WHERE CONVERT(varchar(10),invoice_date, 20) > '2016-01-01') i
ON i.project_id = p.project_id
Il y a environ 80 projets en projects
avec le statut = actif et environ 120 projets dans invoice
qui ont été facturés depuis 01.01.2016. La requête ci-dessus renvoie environ 140 enregistrements, ce qui sonne bien (certains projets actifs non facturés et certains projets facturés non actifs). Le problème est que la requête a environ la moitié des project_ids comme vide (NULL?). C'est comme si ça ne tirait pas les project_ids de invoice
. S'il vous plaît, aidez-moi à corriger cela.
Voici un court segment du jeu de résultats comme un tableau ...
...
[10] => Array
(
[project_id] =>
)
[11] => Array
(
[project_id] => C00F2097-CD36-4497-8B26-0BF59F90B1EA
)
[12] => Array
(
[project_id] => 217F3370-50F2-457E-A4F5-0C09F12E654A
)
[13] => Array
(
[project_id] =>
)
[14] => Array
(
[project_id] => B1A06823-73C8-4691-A3D6-0E1A234516B3
etc...
parce que ce sont les projets où ils sont «actifs», mais n'ont pas un projet correspondant de la facture où 'invoice_date> '2016-01-01''. Et vous pourriez avoir des cas où il n'y a pas de projets 'active' pour les factures – Lamak
Inclure les deux tables valeur du projet dans votre sélection. Je suis également perplexe pourquoi vous comparez "dates" à une valeur de chaîne? Je suppose que ça marchera puisque c'est le format aaaa-mm-jj; mais il me semble plus sûr de comparer les dates en utilisant un datatype de date. – xQbert