一尘不染

MySQL 3 次加入同一个表时说表 R1 不存在

mysql

我有一个表格R,其中包含以下字段:

weatherID, 
dateRecorded, 
Days, 
locationID, 
timeRecorded, 
rainAmount, 
rainNumberHours, 
temperature, 
windSpeed, 
windDirection

注意:该Days字段是一个整数类型,描述了自增+1的天数。该weatherID字段是此处未显示的两个不同表中的其他两个字段的串联。

该表的模式已简化,但与我要调查的内容相关。我们想找出是否存在一些遵循其他天气模式的天气模式,并找到满足特定参数和条件的记录。

我在查询中使用别名来获取不同字段值的记录Days

模型查询会清楚地表明:我R在别名样式查询中多次加入表,因此我有别名R1和别名R2,看起来就像将三个表连接在一起。

$sql = "
SELECT R.weatherID, R.Days, R.locationID, R.timeRecorded, R.windDirection, 
R1.weatherID, R1.Days, R1.locationID, R1.timeRecorded, R1.windDirection, 
R2.weatherID, R2.Days, R2.locationID, R2.timeRecorded, R2.windDirection 
FROM ((R 
INNER JOIN R1 ON R.Days= R1.Days) 
INNER JOIN R2 ON R.locationID= R2.locationID) 
WHERE ((R.Days)=[R1].[Days]-2) AND ((R1.Days)=[R2].[Days]-2);
"

该模型为我提供了类似的天气模式,这些模式在两 (2) 天内再次发生或重复(指 WHERE 子句中的“2”)。

现在的问题是我们如何

我想通过以下方式以类似网格的方式排列查询结果:

R.weatherID R.Days R.locationID R.windDirection R1.weatherID R1.Days R1.locationID R1.windDirection R2.weatherID R2.Days R2.locationID R2.windDirection

并且下一条记录也是同样的类似网格的格式。

我在数据库中只有表 R:即我有 weatherdb.R,但我没有“weatherdb.R1”和“weatherdb.R2”,换句话说,我没有表 R1 和 R2,但正在使用他们在别名中,这是行不通的。

但是,MySQL 说:文档 #1146 - 表 ‘weatherdb.R1’ 不存在

sqlWeather1.php 文件是我下面的第一个试用示例:

<?php
    require "database/connection.php";

$sql="SELECT R.weatherID, R.Days, R.locationID, R.timeRecorded, R.windDirection, 
R1.weatherID, R1.Days, R1.locationID, R1.timeRecorded, R1.windDirection, 
R2.weatherID, R2.Days, R2.locationID, R2.timeRecorded, R2.windDirection 
FROM ((R INNER JOIN R1 ON R.Days = R1.Days) INNER JOIN R2 ON R.locationID = R2.locationID) 
WHERE ((R.Days)=R1.Days-2) AND ((R1.Days)=R2.Days-2)
ORDER BY R.Days DESC;";

$result=mysqli_query($db, $sql) or die("Bad query:$sql");

//$result = R2($query);
echo("<table border = 1>");
$first_row = true;
while ($row = mysqli_fetch_assoc($result)) {
    if ($first_row) {
        $first_row = false;
        // Output header row from keys.
        echo '<tr>';
        foreach($row as $key => $field) {
            echo '<th>' . htmlspecialchars($key) . '</th>';
        }
        echo '</tr>';
    }
    echo '<tr>';
    foreach($row as $key => $field) {
        echo '<td>' . htmlspecialchars($field) . '</td>';
    }
    echo '</tr>';
}
echo("</table>");
?>

阅读 56

收藏
2022-10-10

共1个答案

一尘不染

我在给定的查询中看到了两个问题。

我在别名样式查询中多次加入表 R,因此我有别名 R1 和别名 R2,使它看起来像是将三个表连接在一起

您忘记在 R 表上分配别名 R1 、 R2 名称

改变 ,

INNER JOIN R1 ON R.Days= R1.Days
INNER JOIN R2 ON R.locationID= R2.locationID

INNER JOIN R as R1 ON R.Days= R1.Days
INNER JOIN R as R2 ON R.locationID= R2.locationID

MySQL 中不允许使用方括号。我不确定,但[]对于 T-SQL 来说非常独特,因此请删除它们和不相关的括号。

您的最终查询将如下所示:

SELECT R.weatherID, 
       R.Days, 
       R.locationID, 
       R.timeRecorded, 
       R.windDirection, 
       R1.weatherID, 
       R1.Days, 
       R1.locationID, 
       R1.timeRecorded, 
       R1.windDirection, 
       R2.weatherID, 
       R2.Days, 
       R2.locationID, 
       R2.timeRecorded, 
       R2.windDirection 
FROM  R 
INNER JOIN R as R1 ON R.Days= R1.Days
INNER JOIN R as R2 ON R.locationID= R2.locationID 
WHERE R.Days=R1.Days-2 
AND R1.Days=R2.Days-2;
2022-10-10