mysql - 需要帮助通过使用 "for"或 "while"循环类型来缩短此查询

标签 mysql sql

我想知道是否有任何方法可以更改此 SQL 查询,这样我就不必每次都对必须从中提取数据的新字段(“FieldName”)执行 UNION .

我有大约 30 个名称为“Waybill1 到“Waybill30”的字段。

我想执行以下查询,而不必为每个字段 ID 使用 UNION。

这里是查询,仅使用 3 个“FieldName”值:

SELECT `FieldValue`, `SubmissionID` FROM `jos_rsform_submission_values` WHERE `FieldName` = "Waybill1" AND `FieldValue` != ""
UNION
SELECT `FieldValue`, `SubmissionID` FROM `jos_rsform_submission_values` WHERE `FieldName` = "Waybill2" AND `FieldValue` != ""
UNION
SELECT `FieldValue`, `SubmissionID` FROM `jos_rsform_submission_values` WHERE `FieldName` = "Waybill3" AND `FieldValue` != "" ORDER BY `SubmissionId` ASC

它基本上应该执行与 PHP/Javascript 等中的“for”循环相同的任务。

我不太熟悉 SQL,所以任何帮助/指导将不胜感激。

最佳答案

你不需要在这里使用UNION,你可以只使用IN运算符(operator)

IN 运算符允许您在 WHERE 子句中指定多个值。

SELECT FieldValue,
       SubmissionID
FROM   jos_rsform_submission_values
WHERE  FieldName IN ('Waybill1', 'Waybill2', 'Waybill3', 'Waybill4', etc...)
   AND FieldValue != ""
ORDER BY SubmissionId ASC

关于mysql - 需要帮助通过使用 "for"或 "while"循环类型来缩短此查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51615208/

相关文章:

mysql - 嵌套的 MySQL 选择错误

c# - MySQL 返回列名而不是它们的内容

mysql - 在 R 中建模并在 SQL 中评分

sql - 'GO' 附近的语法不正确 - TADOQuery

sql - 如何获取数据库表mysql的最后日期

mysql - 无法添加或更新子行: a foreign key constraint fails with csv import

mysql - 如何指定哪些行应该被 GROUP BY 保留,哪些应该被折叠

php - MySQL PHP 锁表,在期望并发连接时有没有更好的解决方案

mysql - 是否可以在 MySQL 中定义一个未指定返回类型的存储函数?

php - mysql 最后 5 个倒序?