46

私はこのクエリを持っています:

SELECT  `id` ,  `naam` 
FROM  `klanten` 
WHERE (
`email` LIKE  '%@domain.nl%'
OR  `email2` LIKE  '%@domain.nl%'
)

しかし、私はこのようなことをしたい:

SELECT  `id` ,  `naam` 
FROM  `klanten` 
WHERE IF(`email` > 0,
`email` LIKE  '%@domain.nl%'
,  `email2` LIKE  '%@domain.nl%'
)

メールが存在するかどうかを確認する方法は? 電子メールを使用したいのですが、このフィールドが空の場合は、email2 を使用したいと考えています。どうすればこれを達成できますか?

4

5 に答える 5

71

IFフィールドを選択するために使用され、その後にLIKE句が配置されます。

SELECT  `id` ,  `naam` 
FROM  `klanten` 
WHERE IF(`email` != '', `email`, `email2`) LIKE  '%@domain.nl%'
于 2013-03-01T16:42:15.300 に答える
14

使用したいcoalesce()

where coalesce(email, email2) like '%anja@fiskkoer.nl%'

NULL ではなくの文字列 ('')を処理する場合は、次のケースが機能します。

where (case when email is NULL or email = '' then email2 else email end) like '%anja@fiskkoer.nl%'

そして、文字列が実際には単なるスペースであることが心配な場合は、次のようにします。

where (case when email is NULL or ltrim(email) = '' then email2 else email end) like '%anja@fiskkoer.nl%'

余談ですが、サンプルifステートメントは実際には「メールが 0 より大きい数字で始まる場合」と言っています。これは、数値である 0 との比較であるためです。MySQL は暗黙的に文字列を数値に変換しようとします。したがって、'abcd@de.com' は、文字列が 0 として変換されるため失敗します。'0abc@de.com' も同様です。ただし、「1abc@de.com」と「01abc@de.com」は成功します。

于 2013-03-01T16:34:33.433 に答える
3

以下は、ゴードン・リノフの回答とは機能的に異なることに注意してください。email2彼の答えは、 if emailis NULLを使用することを前提としています。私のemail2場合emailは、空の文字列の場合に使用することを前提としています。正しい答えは、データベースによって異なります (または、NULL チェック空文字列チェックを実行することもできます。データベースの設計に何が適切かによって異なります)。

SELECT  `id` ,  `naam` 
FROM  `klanten` 
WHERE `email` LIKE  '%anja@fiskkoer.nl%'
OR (LENGTH(email) = 0 AND `email2` LIKE  '%anja@fiskkoer.nl%')
于 2013-03-01T16:35:15.997 に答える
2

これは、クエリ パラメータを使用して、同じテーブルへの外部キー リレーションシップを持つテーブルのサンプル クエリです。

ここに画像の説明を入力

SET @x = -1;
SELECT id, categoryName 
FROM Catergory WHERE IF(@x > 0,category_ParentId = @x,category_ParentId IS NOT NULL);

@x変更可能。

于 2020-03-15T06:41:06.920 に答える
2

これを試してください、それが役立つことを願っています

select user_display_image as user_image,
user_display_name as user_name,
invitee_phone,
(
 CASE 
    WHEN invitee_status=1 THEN "attending" 
    WHEN invitee_status=2 THEN "unsure" 
    WHEN invitee_status=3 THEN "declined" 
    WHEN invitee_status=0 THEN "notreviwed" END
) AS  invitee_status
 FROM your_tbl
于 2015-10-28T08:18:07.167 に答える