1

我有一个连接两个表的 MySQL 查询。这是当前的查询结果:

id | login | privacy-weight | requires
--------------------------------------------
0  | user  | 1              | NULL
0  | user2 | 1              | NULL
0  | user3 | 1              | privacy-weight

查询本身并不重要,因为我只想像WHERE现在一样向查询添加条件。

我只需要获取(用我自己的话)的值:

IF (`requires` = 'privacy-weight'), then `privacy-weight` must equal = 0;

这意味着,我需要这个条件:

WHERE `privacy-weight` = 0

但只有当这是真的:

requires = 'privacy-weight'

这可以做到吗?

编辑

显然这太难理解了,因此,一个示例输出:

privacy-weight | requires
-------------------------
0              | NULL
1              | NULL
0              | privacy-weight
1              | NULL

这些将被忽略(不获取):

privacy-weight | requires
-------------------------
1              | privacy-weight
4

6 回答 6

3

你可以使用这个简单的测试:

WHERE (requires = 'privacy-weight' AND privacy-weight = 0) OR requires <> 'privacy-weight' OR requires IS NULL

第一部分(requires = 'privacy-weight' AND privacy-weight = 0)防止输出:

privacy-weight | requires
-------------------------
1              | privacy-weight

但保留:

privacy-weight | requires
-------------------------
0              | privacy-weight

而第二部分OR requires <> 'privacy-weight' OR requires IS NULL将保留以下内容:

privacy-weight | requires
-------------------------
0              | NULL
1              | NULL
1              | NULL
于 2013-01-30T16:05:24.023 回答
1

我认为这应该有效:

SELECT id, login, ( IF(requires='privacy-weight',0,privacy-weight) ) AS privacy-weight, requires
FROM [mytable]
WHERE [mywhereclause]

有关 IF 函数如何在 MySQL 中工作的更多信息,请参阅http://dev.mysql.com/doc/refman/5.5/en/if.html上的文档

于 2013-01-30T16:02:27.847 回答
1
WHERE CASE WHEN requires = 'privacy-weight' THEN 0 ELSE privacy-weight END = 0 
于 2013-01-30T16:03:37.940 回答
1

简单地:

WHERE NOT (requires='privacy-weight' AND privacy-weight<>0)
于 2013-01-30T16:17:25.620 回答
0

正如@philwinkle 发布的那样,mysql 中有一个IF()函数,但它会更改列的值,但不会影响行。您想将此添加到您的 WHERE 语句中。

SELECT id, login, `privacy-weight`, requires FROM yourtable 
  WHERE `privacy-weight`=0 AND requires='privacy-weight'

编辑我已将其改回以按书面方式回答 OP 的问题。

于 2013-01-30T16:04:55.643 回答
0

您可以在 where 子句中执行 if 条件

SELECT *
FROM mytable
WHERE IF(requires = 'privacy-weight',privacy-weight = 0,1);

但是你可以实现它,如果你也提到你只需要

SELECT *
FROM mytable
WHERE requires = 'privacy-weight'
    AND privacy - weight = 0;
于 2013-01-30T16:07:04.300 回答