我对编码还很陌生,出于自己的兴趣,我正在尝试创建一个数据库系统以供工作和学习。
我有一个数据库查询,旨在显示最近的结果,其中 Sample Name
、Tank Name
和 Customer
匹配。这些来自三个不同但相关的表。
我提出了以下查询。 此查询有效,但就我自己的教育而言,我是按照正确的路线工作还是有更好的方法来解决这个问题(这看起来非常凌乱且难以理解)?
SELECT
`t_workorders`.`Work Order`,
`t_workorders`.`Date Sampled`,
`Result`,
`t_test_units`.`Unit`
FROM
`t_sampletests`
RIGHT JOIN `t_samples`
ON `Sample` = `pk_Sample`
RIGHT JOIN `t_workorders`
ON `t_samples`.`Work Order` = `t_workorders`.`Work Order`
LEFT JOIN `t_test_units`
ON `t_sampletests`.`Unit` = `t_test_units`.`pk_Unit`
WHERE `t_sampletests`.`Test` =
(SELECT
`Test`
FROM
`t_sampletests`
WHERE `pk_SampleTest` = $ testID)
AND `t_Samples`.`Sample Name` =
(SELECT
`Sample Name`
FROM
`t_sampletests`
LEFT JOIN `t_Samples`
ON `Sample` = `pk_Sample`
WHERE `pk_SampleTest` = $ testID)
AND `t_Samples`.`Tank` =
(SELECT
`Tank`
FROM
`t_sampletests`
LEFT JOIN `t_Samples`
ON `Sample` = `pk_Sample`
WHERE `pk_SampleTest` = $ testID)
AND `t_workorders`.`Customer` =
(SELECT
`Customer`
FROM
`t_sampletests`
LEFT JOIN `t_Samples`
ON `Sample` = `pk_Sample`
LEFT JOIN `t_workorders`
ON `t_Samples`.`Work Order` = `t_workorders`.`Work Order`
WHERE `pk_SampleTest` = $ testID)
AND `t_workorders`.`Work Order` <>
(SELECT
`t_workorders`.`Work Order`
FROM
`t_sampletests`
LEFT JOIN `t_Samples`
ON `Sample` = `pk_Sample`
LEFT JOIN `t_workorders`
ON `t_Samples`.`Work Order` = `t_workorders`.`Work Order`
WHERE `pk_SampleTest` = $ testID)
ORDER BY `t_workorders`.`Work Order` DESC
LIMIT 15
如有任何替代或更合适方法的建议,我们将不胜感激。
非常感谢
最佳答案
IMO,使用新行和增量将帮助您阅读和构建查询,并让您快速了解它的作用。
我在使用 SQL 关键字时也尽量保持一致,并以大写形式书写。
SELECT `t_workorders`.`Work Order`, `t_workorders`.`Date Sampled`, `Result`,`t_test_units`.`Unit`
FROM `t_sampletests`
RIGHT JOIN `t_samples` ON `Sample` = `pk_Sample`
RIGHT JOIN `t_workorders` ON `t_samples`.`Work Order` = `t_workorders`.`Work Order`
LEFT JOIN `t_test_units`ON `t_sampletests`.`Unit` = `t_test_units`.`pk_Unit`
WHERE `t_sampletests`.`Test` = (
SELECT `Test` FROM `t_sampletests` WHERE `pk_SampleTest` = $testID
)
AND `t_Samples`.`Sample Name` = (
SELECT `Sample Name`
FROM `t_sampletests`
LEFT JOIN `t_Samples` ON `Sample` = `pk_Sample` WHERE `pk_SampleTest` = $testID
)
AND `t_Samples`.`Tank` = (
SELECT `Tank`
FROM `t_sampletests`
LEFT JOIN `t_Samples` ON `Sample` = `pk_Sample` WHERE `pk_SampleTest` = $testID
)
AND `t_workorders`.`Customer`= (
SELECT `Customer`
FROM `t_sampletests`
LEFT JOIN `t_Samples` ON `Sample` = `pk_Sample`
LEFT JOIN `t_workorders` ON `t_Samples`.`Work Order` = `t_workorders`.`Work Order`
WHERE `pk_SampleTest` = $testID
)
AND `t_workorders`.`Work Order` <> (
SELECT `t_workorders`.`Work Order`
FROM `t_sampletests`
LEFT JOIN `t_Samples` ON `Sample` = `pk_Sample`
LEFT JOIN `t_workorders` ON `t_Samples`.`Work Order` = `t_workorders`.`Work Order`
WHERE `pk_SampleTest` = $testID
)
ORDER BY `t_workorders`.`Work Order`
DESC LIMIT 15;
(不要忘记查询结束时的 ;
)
关于Mysql查询代码改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38654178/