【问题标题】:JOIN two sql SELECT statements where one has single record and other has multiple records加入两个 sql SELECT 语句,其中一个有单个记录,另一个有多个记录
【发布时间】:2013-03-05 15:20:02
【问题描述】:

我有两个表,第一个是 mda_alert_info,第二个是 key_contacts_info。对于每个警报设置,可能有多个相应的联系人。两个表都由 3 列 mda_id、stage_id 和 ref_number 链接,在查询期间我必须为它们传递数字值

如何在一个语句中从两个表中获得我想要的所有内容。下面是单独的 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'");

这将始终返回一条记录

$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'");    

这可能会返回多条记录

我尝试了一段时间但无法正常工作,因此我尝试在两个表中添加另一个名为“me”的字段,该字段基本上是连接 mda_id 和 stage_id 字符串,然后我尝试了下面的查询。

$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'");

但它仍然无法正常工作。我做错了什么以及如何让它发挥作用。

更新:

对不起,我应该澄清一下表之间的关系,每个表上都存在三列,但不是任何一个表上的主键

【问题讨论】:

  • 我上面说了,mda_id、stage_id、ref_number 3列

标签: mysql sql select join left-join


【解决方案1】:
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'

如需进一步了解联接,请访问以下链接:

【讨论】:

  • 我需要为 ref_number、mda_id 和 stage_id 提供值
  • 对不起,我应该澄清一下表之间的关系,每个表上都存在三列,但不是任何一个表上的主键
  • 所以你关心性能?添加复合列索引,ALTER TABLE mda_alert_info INDEX (mda_id, stage_id, ref_number) AND ALTER TABLE key_contacts_info INDEX (mda_id, stage_id, ref_number)
  • @Amanni 阻止查询执行 FULL TABLE SCAN 导致大型数据库性能低下。
  • 好的,但我的问题首先是让查询在上面给出的答案不起作用
【解决方案2】:
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
;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 2018-06-07
    • 2010-12-31
    • 2013-04-14
    相关资源
    最近更新 更多