我有一个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
答案 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的问题。