用条件语句进行MySQL查询?

时间:2013-01-30 15:59:05

标签: mysql

我有一个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

6 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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

上的文档

答案 2 :(得分:1)

WHERE CASE WHEN requires = 'privacy-weight' THEN 0 ELSE privacy-weight END = 0 

答案 3 :(得分:1)

简单地:

WHERE NOT (requires='privacy-weight' AND privacy-weight<>0)

答案 4 :(得分:0)

你可以在where子句

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

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

SELECT *
FROM mytable
WHERE requires = 'privacy-weight'
    AND privacy - weight = 0;

答案 5 :(得分:-1)

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

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

编辑我已将此更改回来以回答OP的问题。