gpt4 book ai didi

mysql - 复杂搜索 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 13:57:19 25 4
gpt4 key购买 nike

我需要你的 SQL 查询帮助。

我需要在表中选择值,其中数学元素具有最小的顺序,目前我有以下查询:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com