【问题标题】:Include `WHERE` in a joined sql sequence在连接的 sql 序列中包含“WHERE”
【发布时间】:2013-06-27 20:24:44
【问题描述】:

我有以下工作 sql 序列:

SELECT *, films.category AS filmCategory
FROM ( SELECT *
       FROM films
       ORDER BY `unique` ASC
       LIMIT 6, 4) films
LEFT OUTER JOIN items ON items.unique = films.ref
ORDER BY films.unique ASC

这很有效,可以从数据库中选择正确的四个元素。但是,我有一些使用WHERE 检查的规则,但我无法开始工作。我做了以下事情:

SELECT *, films.category AS filmCategory
FROM ( SELECT *
       FROM films
       ORDER BY `unique` ASC
       LIMIT 6, 4) films
LEFT OUTER JOIN items ON items.unique = films.ref
WHERE films.youtube IS NOT NULL AND films.youtube <> ''
ORDER BY films.unique ASC

其中唯一的区别是添加了带有WHERE 子句的行。但这不起作用 - 实际上它与以前没有区别,但返回相同的行。

如何在这个 sql 语句中正确包含这些 WHERE 规则?

注意

films.youtube IS NOT NULL AND films.youtube &lt;&gt; '' 行正在检查特定单元格是否为空。这是在this question的帮助下制作的

【问题讨论】:

  • 在什么情况下它不起作用?它是否返回具有 films.youtube 的 NULL 或“空”值的行?

标签: sql where


【解决方案1】:

也许您正在子查询中寻找where 子句?这样,limit 将在您的where 子句之后应用

SELECT *, films.category AS filmCategory
FROM ( SELECT *
       FROM films
       WHERE films.youtube IS NOT NULL AND films.youtube <> ''
       ORDER BY `unique` ASC
       LIMIT 6, 4) films
LEFT OUTER JOIN items ON items.unique = films.ref
ORDER BY films.unique ASC

一个小的附加建议。你可以简化:

WHERE films.youtube IS NOT NULL AND films.youtube <> ''

WHERE films.youtube > ''

因为null &gt; '' 不是真的(而是unknown。)或者也许更具可读性:

WHERE length(films.youtube) > 0

【讨论】:

  • 更简单:WHERE films.youtube &gt; ''
猜你喜欢
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 2023-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多