1
如果一個返回的查詢返回沒有行,如何返回NULL還有很多問題。但是當沒有結果返回時,我沒有發現有關多值查詢返回NULL的任何內容。如果沒有行返回,返回空值爲NULL的行
主查詢:
SELECT UserOpinion.*, x, y, z... FROM subquery, (x) AS x, (y) AS y...
I trust you get the gist.
查詢我有一個子查詢:
(SELECT TOP 1
u.BADId,
Date,
State,
Note,
Comment,
Alias,
Title,
UserId,
o.Id AS OpinionId
FROM
[Opinion] o
RIGHT JOIN
[User] u
ON
o.UserId = u.Id
WHERE
(Date IS NULL OR (Date = (SELECT MAX(Date)
FROM [Opinion]
WHERE UserId = o.UserId)))
AND
u.BADId = 'myvalue') AS UserOpinion;
比如我曾嘗試以下:
(SELECT TOP 1 * FROM (SELECT TOP 1
u.BADId,
Date,
State,
Note,
Comment,
Alias,
Title,
UserId,
o.Id AS OpinionId
FROM
[Opinion] o
RIGHT JOIN
[User] u
ON
o.UserId = u.Id
WHERE
(Date IS NULL OR (Date = (SELECT MAX(Date)
FROM [Opinion]
WHERE UserId = o.UserId)))
AND
u.BADId = 'myvalue'
UNION SELECT NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL) t) AS UserOpinion;
這將返回NULL,不管'myvalue'存在。我想要的是,如果條目存在,它會返回查詢的值,或者如果沒有條目,它會在每列上返回空值。
我也試過如下:
(COALESCE(SELECT TOP 1
u.BADId,
Date,
State,
Note,
Comment,
Alias,
Title,
UserId,
o.Id AS OpinionId
FROM
[Opinion] o
RIGHT JOIN
[User] u
ON
o.UserId = u.Id
WHERE
(Date IS NULL OR (Date = (SELECT MAX(Date)
FROM [Opinion]
WHERE UserId = o.UserId)))
AND
u.BADId = 'myvalue'), NULL) AS UserOpinion;
這裏的主要問題是,整個查詢返回咱這「myvalue的」沒有比賽。其他查詢不需要myvalue並且使多個獨立查詢不是性能約束的選項。
我不是一位SQL專家,任何有關正確方向的建議都將不勝感激。
類似的問題,但在這裏不適用: