1

2 つのテーブルを結合したままの 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

2番目の部分OR requires <> 'privacy-weight' OR requires IS NULLは次のものを保持します:

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

単に:

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

私はこれがうまくいくと思います:

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

MySQL で IF 関数がどのように機能するかについての詳細は、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 に答える
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 に答える