我的桌子上有两排。
start end
A) 6 10
B) 2 NULL
C) 26 NULL
我必须编写一个查询来列出从用户获取的范围$from
和$to
中的这些行。象 -
条件1 - $from = 3
$to = 8
- 仅列出A
条件2 - $from = 1
$to = 8
- 列出A和B(因为它部分位于范围内)
条件3 - $from = 1
$to = 30
- 列出所有3行。
我在where子句中试过这个 -
WHERE ((start >= $from)) AND ((end <= $to) OR end IS NULL)
但它错误地导致条件1的行C.
请提供任何提示。感谢。
答案 0 :(得分:1)
以相反的方式修改WHERE子句 -
WHERE ((end >= $from AND start <= $to ) OR
(start BETWEEN $from AND $to AND end IS NULL) )
似乎满足您列出的所有3个条件及其所需的输出。
答案 1 :(得分:0)
您的查询如下所示:
WHERE (start >= 3) AND ((end <= 8) OR (end = NULL))
由于AND部分中的第一个语句为false,因此它会检查第二个语句。输出是:
WHERE (start >= 3) AND (end = NULL)
因为C开始大于3 AND end = NULL所以它被选中
如果删除或重写NULL部分,则应该可以使用WHERE子句。
更新: 如果要忽略NULL值,那么根据数据库中的一个将起作用。
WHERE (start >= 3) AND ((end <= 8) AND (end <> NULL))
WHERE (start >= 3) AND ((end <= 8) AND (end != NULL))
WHERE (start >= 3) AND ((end <= 8) AND (end IS NOT NULL))
更新2: 不再需要最后的括号,给出:
WHERE (start >= 3) AND (end <= 8) AND (end <> NULL)
答案 2 :(得分:0)
如果我理解正确,你可以使用:
WHERE (start BETWEEN $from AND $to) or (end BETWEEN $from AND $to) or (start >= $from AND end == NULL)
答案 3 :(得分:0)
$ WHERE(start&gt; = 3)AND((end&lt; = 8)OR(end = NULL))
你是ccgen.xyz我的朋友