gpt4 book ai didi

mysql - 用于根据两个表行确定真/假的 SQL

转载 作者:行者123 更新时间:2023-11-29 18:12:21 26 4
gpt4 key购买 nike

考虑一个表,其中包含针对提交的表单上的每个字段的行。

CREATE TABLE `FormResponses` (
`responseID` char(35) COLLATE utf8_unicode_ci DEFAULT NULL,
`formID` char(35) COLLATE utf8_unicode_ci DEFAULT NULL,
`formField` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`formValue` longtext COLLATE utf8_unicode_ci
)

如果提交的表单有 2 个字段(user_id 和 audio_file_id),则会有两行,都具有相同的 responseID 和 formId。

现在,我需要查询表以确定 user_id 是否已提交特定 audio_file_id 的表单(以防止重复提交音频文件,同时允许使用同一表单提交其他音频文件)。

伪查询可能如下所示:

SELECT responseId
FROM FormResponses
WHERE formId = FORM_ID_VALUE AND EXISTS


( SELECT responseID
FROM FormResponses
WHERE formField = "user_id" AND formValue = USER_ID_VALUE

AND

SELECT responseID
FROM FormResponses
WHERE formField = "audio_file_id" AND formValue = AUDIO_FILE_ID_VALUE AND responseID = RESPONSE_ID_OF_USER_ID_QUERY_ABOVE

)

基本上,简单的英语查询将是“给我 formId = 123 的两行的响应 ID,这两行中的一行代表 456 的 user_id,另一行代表 789 的 audio_file_id ”

值得注意的是:如果用户为两个不同的音频文件提交相同的表单,则这两个提交的responseID将不同,但formID将相同。

我希望我问得足够清楚......希望解释起来比做起来更难!

最佳答案

每当您需要合并同一个表中两行的数据时,您都会执行自动连接,即查询该表两次并调用它们作为实例 a 和 b。然后您从表 a 中获取一行,从表 b 中获取另一行。如果满足所有条件,您将得到结果行:

SELECT a.responseId
FROM FormResponses a
JOIN FormResponses b
ON a.formId = b.formId
AND a.responseId = b.responseId
WHERE a.formId = FORM_ID_VALUE
AND a.formField = 'user_id'
AND a.formValue = USER_ID_VALUE
AND b.formField = 'audio_file_id'
AND b.formValue = AUDIO_FILE_ID_VALUE

关于mysql - 用于根据两个表行确定真/假的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47292334/

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