1

2つのテーブルがあります。1つ目はmda_alert_infoで、2つ目はkey_contacts_infoです。設定されたアラートごとに、対応する複数の連絡先が存在する場合があります。両方のテーブルは3つの列mda_id、stage_id、ref_numberでリンクされており、クエリ中にそれらの数値を渡す必要があります

1つのステートメントで両方のテーブルから必要なものをすべて取得するにはどうすればよいですか。以下は、個々のSELECTステートメントです。

$result = mysql_query("SELECT `mda_name`, `project_name`, `ipc_id` FROM `mda_alert_info` WHERE `stage_id`=1 AND `mda_id`=2 AND `ref_number`= '444'");

これは常に1つのレコードを返します

$result = mysql_query("SELECT `contact_role`, `contact_email`, `contact_ph_number` FROM `key_contacts_info` WHERE `stage_id`=1 AND `mda_id`=2 AND `role`=0 AND `ref_number`='444'");    

これにより、複数のレコードが返される場合があります

しばらく試してみましたが、動作しませんでした。そのため、基本的にmda_id文字列とstage_id文字列を連結している「me」という別のフィールドを両方のテーブルに追加してみてから、以下のクエリを試しました。

$result = mysql_query("SELECT key_contacts_info.contact_role, key_contacts_info.contact_email, key_contacts_info.contact_ph_number, mda_alert_info.mda_name, mda_alert_info.project_name, mda_alert_info.ipc_id FROM key_contacts_info LEFT JOIN mda_alert_info ON key_contacts_info.me = mda_alert_info.me WHERE stage_id=1 AND mda_id=2 AND role=0 AND ref_number='444'");

しかし、それはまだ機能していません。何が間違っているのか、どうすればそれを機能させることができますか。

アップデート:

申し訳ありませんが、テーブル間の関係について明確にする必要があります。3つの列は各テーブルに存在しますが、どちらのテーブルの主キーでもありません。

4

2 に答える 2

2
SELECT  a.*, b.*
FROM    mda_alert_info a
        INNER JOIN key_contacts_info b
            ON  a.mda_id = b.mda_id AND
                a.stage_id = b.stage_id AND
                a.ref_number = b.ref_number 
WHERE   b.role = 0 AND
        a.stage_id = 1 AND 
        a.mda_id = 2 AND 
        a.ref_number = '444'

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。

于 2013-03-05T15:24:04.990 に答える
0
select
    a.mda_name,
    a.project_name,
    a.lpc_id,
    k.contact_role,
    k.contact_email,
    k.contact_ph_number
from mda_alert_info a
join key_contacts_info k
    on a.state_id = k.state_id
    and a.mda_id = k.mda_id
    and a.ref_number = k.ref_number
where a.state_id = 1
  and a.mda_id = 2
  and a.ref_number = '444'
  and k.role = 0
;
于 2013-03-05T15:25:15.920 に答える