2015-02-10 180 views
0

与列值NOT NULL是NULL选择记录VS一个选择覆盖记录(S)

这听起来像一个典型的SELECT * FROM表WHERE列IS NOT NULL ......但不太

以下是一个表格,代表我需要使用的一部分数据。

<table> 
 
    <tr> 
 
    <td align="center">Index</td> 
 
    <td align="center">A</td> 
 
    <td align="center">B</td> 
 
    <td align="center">C</td> 
 
    </tr> 
 
    <tr> 
 
    <td align="center">0</td> 
 
    <td align="center">NULL</td> 
 
    <td align="center">NULL</td> 
 
    <td align="center">NULL</td> 
 
    </tr> 
 
    <tr> 
 
    <td align="center">1</td> 
 
    <td align="center">NULL</td> 
 
    <td align="center">NULL</td> 
 
    <td align="center">1</td> 
 
    </tr> 
 
    <tr> 
 
    <td align="center">2</td> 
 
    <td align="center">NULL</td> 
 
    <td align="center">1</td> 
 
    <td align="center">NULL</td> 
 
    </tr> 
 
    <tr> 
 
    <td align="center">3</td> 
 
    <td align="center">NULL</td> 
 
    <td align="center">1</td> 
 
    <td align="center">1</td> 
 
    </tr> 
 
    <tr> 
 
    <td align="center">4</td> 
 
    <td align="center">1</td> 
 
    <td align="center">NULL</td> 
 
    <td align="center">NULL</td> 
 
    </tr> 
 
    <tr> 
 
    <td align="center">5</td> 
 
    <td align="center">1</td> 
 
    <td align="center">NULL</td> 
 
    <td align="center">1</td> 
 
    </tr> 
 
    <tr> 
 
    <td align="center">6</td> 
 
    <td align="center">1</td> 
 
    <td align="center">1</td> 
 
    <td align="center">NULL</td> 
 
    </tr> 
 
    <tr> 
 
    <td align="center">7</td> 
 
    <td align="center">1</td> 
 
    <td align="center">1</td> 
 
    <td align="center">1</td> 
 
    </tr> 
 
</table>

指数0记录代表默认记录,如果有对A,B无覆盖值,或C

我总是询问与对于A值人人会用, B & C但如果没有发现我想要NULL记录OR NULL值组合。

通过我试图做到这一点的SQL Server 2005的

我一直在试图像

SELECT * FROM表 WHERE(A = 1或IS NULL)或方法(B = 1或B IS NULL)或(C = 1)

实际查询是4个表的交叉连接...所以值表代表我试图解决的最后部分。

而且指数0代表的结果,如果没有匹配...但我可以在PHP更是一个创纪录的收益和工艺进一步

+0

显示您尝试使用的SQL。一种方法来完成这将是联合0记录总是顺序索引desc和返回顶部1 – xQbert 2015-02-10 21:32:10

回答

0

假设你的where子句有意向始终返回1点或0的记录.. 只需将索引0始终合并,并选择前1个降序。这将始终返回1条记录,它总是1个匹配条件或0,除非您的where子句返回的记录超过1条,在这种情况下,这将返回匹配的最高索引。

SELECT Top 1 * 
FROM (
    SELECT * 
    FROM TABLE 
    WHERE A=A AND B=B AND C=C 

    UNION ALL 
    SELECT * FROM TABLE WHERE INDEX=0) B 
ORDER BY index desc; 
+0

我不能明确定义索引= 0我需要找到它...也可能有更多的一个记录返回。 – Cachito 2015-02-10 22:12:18