具有多个select语句的复杂MySQL查询

Dan*_*ume 1 mysql select multi-table

我在Mysql中有三个链接在一起的表:

个人资料(身份证,姓名,东西......)

联系(ID,ProfileID,desc,Ord)

地址(ID,ProfileID,desc,Ord)

现在我需要从配置文件表中选择所有配置文件,其中包含“desc”来自Contact和Address 的字段,其中Ord = 1.(这是一个搜索功能,在表格中我将显示名称,主要联系信息和主要地址客户.

我目前可以使用三个单独的SQL请求执行此操作:

SELECT Name, ID FROM Profile WHERE name=”bla”
Run Code Online (Sandbox Code Playgroud)

然后在foreach循环中,我将运行另外两个请求:

SELECT ProfileID, desc FROM Contact WHERE ProfileID=MyProfileID AND Ord=1
SELECT ProfileID, desc FROM Address WHERE ProfileID=MyProfileID AND Ord=1
Run Code Online (Sandbox Code Playgroud)

我知道你可以SELECT在一个查询中做多个,有没有办法将所有三个组合SELECT成一个查询?

Tar*_*ryn 7

你应该能够JOIN对表profile.idprofileid其它表所示.

如果您确定profileid所有三个表中都存在,那么您可以使用INNER JOIN.将INNER JOIN在所有表的匹配行的回报:

select p.id,
  p.name,
  c.desc ContactDesc,
  a.desc AddressDesc
from profile p
inner join contact c
  on p.id = c.profileid
inner join address a
  on p.id = a.profileid
where p.name = 'bla'
  and c.ord = 1
  and a.ord = 1
Run Code Online (Sandbox Code Playgroud)

如果您不确定是否有匹配的行,那么您可以使用LEFT JOIN:

select p.id,
  p.name,
  c.desc ContactDesc,
  a.desc AddressDesc
from profile p
left join contact c
  on p.id = c.profileid
  and c.ord = 1
left join address a
  on p.id = a.profileid
  and a.ord = 1
where p.name = 'bla'
Run Code Online (Sandbox Code Playgroud)

如果您需要帮助学习JOIN语法,这里有一个很好的连接的视觉解释