选择列值为NOT NULL且为NULL值的记录
这听起来像典型的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>
&#13;
索引0记录表示如果A,B或C没有覆盖值,则每个人都会使用的默认记录
我一直在质疑A,B和B的价值观。 C但是如果没有找到,我想要NULL记录OR NULL值组合。
顺便说一下,我正在尝试使用SQL-Server 2005。
我一直在尝试像
这样的东西SELECT * FROM Table WHERE(A = 1或A为空)或(B = 1或B为空)或(C = 1)
实际查询是4个表的交叉连接...所以值表代表我想要解决的最后部分。
如果没有匹配的话,索引0也代表结果......但是我可以让更多的那条记录返回并在php中进一步处理
答案 0 :(得分: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;