繁体   English   中英

左联接不检索条件字段的NULL值

[英]Left Join not retrieving NULL value for the conditional field

我试图通过联接从两个表中检索值,但是第二列中缺少几个值。

例如

valuetable

----------------------
| id |orderid| prodid|
----------------------
|  1 |  NULL |      4|
----------------------
|  1 |     A |      4|
----------------------
|  2 |  NULL |      4|
----------------------
|  2 |  NULL |      3|
----------------------
|  3 |     B |      4|
----------------------
|  3 |     B |      3|
----------------------
|  3 |     B |      5|
----------------------

Nametable

--------------
| id |   Name|
--------------
|  1 |  Apple|
--------------
|  2 |   Ball|
--------------
|  3 |    Cat|
--------------
|  4 |    Dog|
--------------

我有上面的两张桌子。 我必须以以下格式检索值。

查询结果

----------------------
| id |   Name|orderid|
----------------------
|  1 |  Apple|  NULL |
----------------------
|  2 |   Ball|  NULL |
----------------------
|  3 |    Cat|     B |
----------------------
|  4 |    Dog|  NULL |
----------------------

我已经使用以下查询

SELECT  nt.id, nt.[Name]
    , MIN(vt.orderid) AS orderid
FROM   Nametable nt  LEFT OUTER JOIN valuetable vt 
ON nt.id = vt.id
WHERE 
    vt.prodid = 3
GROUP BY
    nt.id, nt.[Name]

但缺少| 1 | Apple| NULL | | 1 | Apple| NULL | 行。 我怎样才能找回它? 使用MSSQL Server 2005

UPDATE

值表的prodid = 3的ID值不为1,但我需要以上述方式生成结果。 意味着如果无法从对应产品的值表中获取ID,则它仍应使用ID为NULL值的orderid检索ID及其名称。

好像你有

WHERE vt.prodid = 3

valuetable不包含prodid = 3的Apple

因此,您不应在where中,而应在join子句中:

SELECT  nt.id, nt.[Name]
, MIN(vt.orderid) AS orderid
FROM   Nametable nt  LEFT OUTER JOIN valuetable vt 
ON nt.id = vt.id AND vt.prodid = 3
GROUP BY
  nt.id, nt.[Name]

空值将被忽略,因为您使用的是聚合函数(MIN())。 如果将结果输出为文本,则应该看到此警告。 您的示例查询也有vt.prodid = 3 where子句,该子句显然会排除您要查找的行

问题似乎出在您的where条件上,因为您执行了左连接,因此vt.Prod_id可能为null(因此不是3)。

如果您想要ID为3的产品的所有Nametable条目(例如,所有名称,如果未映射产品则为null)(即使没有条目),也可以尝试:

SELECT  nt.id, nt.[Name]
    , MIN(vt.orderid) AS orderid
FROM   Nametable nt  LEFT OUTER JOIN valuetable vt 
ON nt.id = vt.id
WHERE 
    (vt.prodid is null or vt.prodid = 3)
GROUP BY
    nt.id, nt.[Name]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM