我有一個表project p
和表invoice i
,它們都有一個project_id字段。我想要一個結果集,其中包含所有來自project
的project_id,其中i.status = "Active"
還包括來自invoice
的所有project_id,其中invoice_date > 2016-01-01
。這是我迄今爲止嘗試過的查詢。SQL OUTER JOIN返回一些空記錄 - 爲什麼?
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
有在projects
與狀態約80項目=活性和在invoice
約120項目自2016年1月1日已被開具發票。上述查詢返回約140條記錄,這聽起來正確(一些非發票活動項目和一些非活動發票項目)。問題是查詢大約有一半的project_ids爲空(NULL?)。就好像它沒有從invoice
中拉出project_ids。請幫我解決這個問題。
下面是結果設置爲陣列的短段...
...
[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...
因爲那些是'active'的項目,但沒有'invoice_date>'2016-01-01''的發票的相應項目。你可能會遇到這樣的情況:發票中沒有「活動」項目 – Lamak
在你的選擇中包括兩個表項目值。我也很疑惑你爲什麼比較一個字符串值的「日期」?我想它會起作用,因爲它是yyyy-mm-dd格式;但對我來說使用日期數據類型比較日期似乎更安全。 – xQbert