Mysqlで次のデータベースがあるとします。

[user]
(username)(domain_no)(password)
test 1 test
[domain]
(no)(domain_name)
1 test.com

このデータベースにtest@test.comがマッチするか検索するsql文を考えてください・・・。

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2007/03/09 15:27:35
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:chuken_kenkou No.3

回答回数722ベストアンサー獲得回数54

ポイント100pt

MySQLの質問をする場合は、使用バージョンを書きましょう。

表の列構成、表のデータ例と、得たい結果の例を示すと、具体的な回答を得られます。

select concat(username,'@',domain_name) as email,password
 from `user`,`domain`
 where domain_no=no
   and concat(username,'@',domain_name)='test@test.com'

MySQLの文字連結は、「||」といった記号でなく、concat関数を使用する必要があります。

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.3.2 文字列関数

id:Sprint

MYSQL4.1です。

また書き漏れてた・・・。

メールアドレスは$local_part@$domainという関数で渡されます。

質問してて自分がよくわからなくなってきました・・・(汗

2007/03/07 16:58:38

その他の回答2件)

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

ポイント30pt

http://dev.mysql.com/doc/refman/4.1/ja/counting-rows.html

SELECT COUNT(*)
FROM user LEFT JOIN domain ON user.domain_no = domain.no
WHERE user.username = 'test' AND domain.domain_name = 'test.com'
;

といったようなものでよろしいかしら?

id:Sprint

すいません、みてもなにがなんだかわかりません(汗

ためしてみまーす!

2007/03/07 01:39:06
id:ito-yu No.2

回答回数323ベストアンサー獲得回数14

ポイント30pt

SELECT username||'@'||domain_name AS email,password FROM user u,domain d WHERE u.domain_no=d.id AND email='test@test.com';

こんなカンジでどうでしょう

id:Sprint

ありがとうございます。

同じく試してみます!

2007/03/07 16:24:52
id:chuken_kenkou No.3

回答回数722ベストアンサー獲得回数54ここでベストアンサー

ポイント100pt

MySQLの質問をする場合は、使用バージョンを書きましょう。

表の列構成、表のデータ例と、得たい結果の例を示すと、具体的な回答を得られます。

select concat(username,'@',domain_name) as email,password
 from `user`,`domain`
 where domain_no=no
   and concat(username,'@',domain_name)='test@test.com'

MySQLの文字連結は、「||」といった記号でなく、concat関数を使用する必要があります。

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.3.2 文字列関数

id:Sprint

MYSQL4.1です。

また書き漏れてた・・・。

メールアドレスは$local_part@$domainという関数で渡されます。

質問してて自分がよくわからなくなってきました・・・(汗

2007/03/07 16:58:38
  • id:Yota
    質問の意味がわからないので、回答者は推測して答えています
    しかし、回答されたほうも何がなんだかわからない状態ですね。
    >このデータベースにtest@test.comがマッチするか検索するsql文を考えてください

    1.どのテーブルのどの属性を検索しようとしているか
    2.仮にdomainテーブルのdomain_nameを検索するだけならなぜテーブルを二つ出したのか。
    3.マッチするとはどういう意味か。まったく同じということか、文字列に含むということか。


  • id:ito-yu
    意図の伝わりにくい質問文なのは同意ですが
    そこを汲み取って回答するのがはてなの醍醐味ですよ。
  • id:Sprint
    あー、ごめんなさい・・・。
    えーと、eximというメールサーバーでrecipientチェックをしようとしているのです。
    なので受信者のアドレスがデータベースに登録されているか確認する必要があります。
    ただ、データベースが2つのテーブルに(すいません、テーブルです!)にわかれている為、自分ではsql文が考えられませんでした・・・。

    チェックは
    recipients=hoge@hoge.co.jp
    という形でチェックされ受信者情報(recipients)と保存されているメールアドレスがマッチすればtrueということになります。

    今回はこれを
    recipients=mysql;SELECT.....
    という形で表現したかったのです。

    ・・・なんか余計わからなくなってるような・・・。
    説明下手ですいません・・・。

    ですので
    1.userのテーブルではusername(local_part)とドメインの番号はわかりますがドメイン名がわかりません。ドメイン番号を元にdomainからdomain_nameを引き出さないといけません。
    必要なのはusernameとdomain_nameで与えられるデータはメールアドレスです。

    2.usernameとdomain_nameが別々に格納されており、両方必要だからです。

    3.まったく同じである項目があるかどうか、です。


  • id:ito-yu
    id:chuken_kenkouさんの指摘
    「MySQLの文字連結は、「||」といった記号でなく、concat関数を使用する必要があります」を見て

    そんな馬鹿な!||で文字列連結はSQL-99規格標準ではなかったか!
    と調べたところ
    http://dev.mysql.com/doc/refman/4.1/ja/extensions-to-ansi.html
    「MySQL サーバでは、文字列の連結に標準 SQL-99 の || 演算子を使用することができない」

    ぐは。MySQLは標準では||演算子はORの代わりなのね。
    ちなみに、ANSIモードで起動すると||で文字列連結できます。
    http://dev.mysql.com/doc/refman/4.1/ja/ansi-mode.html

    以上、言い訳でした。というわけで私の回答にはポイント不要です。
  • id:Sprint
    chuken_kenkou さんので無事可動しました・・・。
    感謝です・・・。

    今後ともよろしくお願いします・・・。
    ポイントは・・・気持ちです!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません