gpt4 book ai didi

mysql - 如何使用sql获取满足一定条件的结果?

转载 作者:行者123 更新时间:2023-11-29 15:33:01 25 4
gpt4 key购买 nike

我有一个包含这 6 行的表格。

code | type_id | status | type
-----+--------+--------+-------
123 | 123456 | UPLOAD | PDF
123 | 456789 | UPLOAD | DOC
321 | 654321 | UPLOAD | PDF
321 | 897321 | DONE | DOC
456 | 999888 | PEND | PDF
456 | 777666 | UPLOAD | DOC

我想得到如下结果

case1 使用 UPLOAD 获取 type_id 在相同的 PDF 和 doc 代码下上传

case2 仅使用 UPLOAD 获取 type_id,并在 PDF 和 doc 的相同代码下完成上传

case3 在 PEND 时不显示 type_id,并且在 PDF 和 doc 的相同代码下失败

code | type_id1 | type_id2
-----+----------+---------
123 | 123456 | 456789
321 | 654321 | null
null | null | null <for 456 dont show result

如何用sql处理它们以显示结果?

非常感谢~

最佳答案

您可以通过 LEFT JOIN -ing 您的表来实现此目的:

SELECT t1.code, t1.type_id AS type_id1, t2.type_id AS type_id2
FROM your_table t1
LEFT JOIN your_table t2
ON t1.code = t2.code
AND t2.type = 'DOC'
AND t2.status = 'UPLOAD'
WHERE t1.type = 'PDF' AND t1.status = 'UPLOAD'

这将获取包含 PDFUPLOAD 的所有行,并且仅当存在具有匹配的 type_id2codetype = DOC 的行时“添加” status = UPLOAD

对于您提供的数据,预期结果应该是

code | type_id1 | type_id2
-----+----------+---------
123 | 123456 | 456789
321 | 654321 | null

你可以try it here

===版本2=========================================== =====================

这是根据我对您的评论的解释的更新版本:

SELECT t1.code, 
CASE
WHEN t1.status = 'UPLOAD' AND t2.status != 'PEND'
THEN t1.type_id
ELSE null
END AS type_id1,
CASE
WHEN t2.status = 'UPLOAD' AND t1.status != 'PEND'
THEN t2.type_id
ELSE null
END AS type_id2
FROM your_table t1
LEFT JOIN your_table t2
ON t1.code = t2.code
AND t2.type = 'DOC'
WHERE t1.type = 'PDF'

你可以试试here

如果您不需要包含 code | null | null 的行,您可以从 AND t#.status != 'PEND' 子句中删除两个 WHEN ,并在查询的最后添加: AND t1.status != 'PEND' AND t2.status != 'PEND' ,就像 fiddle 中的第二个查询一样。

关于mysql - 如何使用sql获取满足一定条件的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58537110/

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