我需要您的SQL查询帮助。
我需要在mathing元素具有最小顺序的表中选择值,目前我有以下Query:
SELECT p.confirmation,
p.lname,
p.fname,
p.profiletype,
a.address1,
a.city,
c.contactinfo
FROM profile p
LEFT JOIN contact c
ON p.confirmation = c.profileid
AND c.ord = 1
LEFT JOIN address a
ON p.confirmation = a.profileid
AND a.ord =1
当最小的“ a.ord”或c.ord“为1时,此方法效果很好。但是最小值不会总是1,它可能是任何其他数字,因此,我尝试了以下方法而没有成功:
SELECT p.confirmation,
p.lname,
p.fname,
p.profiletype,
a.address1,
a.city,
c.contactinfo
FROM profile p
LEFT JOIN contact c
ON p.confirmation = c.profileid
min(c.ord)
LEFT JOIN address a
ON p.confirmation = a.profileid
min(a.ord)
我已将“ AND a.ord = 1”替换为“ min(a.ord)”,但未成功。
我该如何做而不要进行两个单独的查询。
有没有办法我可以添加一些东西
SELECT c.ord FROM contact c WHERE p.confirmation = c.profileid ORDER BY c.ord LIMIT 1
在当前的SQL里面?
谢谢!
最佳答案
您可以通过计算每个表的最小顺序,然后在联接中使用最小顺序来实现:
SELECT p.confirmation, p.lname, p.fname, p.profiletype,
a.address1, a.city, c.contactinfo
FROM profile p LEFT JOIN
(select c.profileid, MIN(c.ord) as minord
from contact c
group by c.profileid
) minco
on minco.profileid = c.profileid left join
contact c
ON p.confirmation = c.profileid and minco.minord = c.ord LEFT JOIN
(select a.profileid, min(a.ord) as minord
from address a
group by a.profileid
) minao
on minao.profileid = c.profileid left join
address a
ON p.confirmation = a.profileid and minao.minord = a.ord
关于mysql - 复杂搜索SQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15645164/