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
成一个查询?
你应该能够JOIN
对表profile.id
和profileid
其它表所示.
如果您确定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
语法,这里有一个很好的连接的视觉解释
归档时间: |
|
查看次数: |
15019 次 |
最近记录: |