我需要您的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/

10-12 18:05
查看更多