【问题标题】:使用过滤器加入 2 个表
【发布时间】:2022-01-23 17:01:21
【问题描述】:

我有一个问题,如何在过滤两个表的同时加入两个表?

基本上我有两张桌子,请看附件:

司机状态位置表

车辆表

这里的计划是只获取所有具有以下内容的driver_id:

  • 状态 = 0
  • is_online = true
  • vehicle_size = 小

以下是我当前使用过滤器获取所有最近的驱动程序的 sql 语法,车辆大小除外。

SELECT * FROM (
    SELECT *,
    (
        (
            (
                acos(
                    sin(( 14.231 * pi() / 180)) *
                    sin(( lat * pi() / 180)) + cos(( 14.231 * pi() /180 )) *
                    cos(( lat * pi() / 180)) * cos((( 121.321 - lng) * pi()/180))
                )
            ) * 180/pi()
        ) * 60 * 1.1515 * 1.609344
    ) as distance FROM driver_status_location
) driver_status_location
WHERE distance <= 5 AND status=0 AND is_online=true
ORDER BY distance
LIMIT 5;

这里唯一缺少的是过滤另一个表上的vehicle_size。

如果这没有意义,或者我需要添加更多详细信息,请告诉我。提前感谢您的帮助!

【问题讨论】:

  • 请只标记您真正使用的RDBMS。如果您正在使用 SQL Server,以上将出错; LIMIT 不是 T-SQL 中可识别的关键字。
  • 感谢您编辑@Larnu。嗯不确定。当我尝试 LIMIT 时,它在 node.js 中有效
  • 需要edit你的问题来重新标记正确的RDBMS。 LIMIT 确实有效的事实进一步表明您没有使用 SQL Server。
  • 添加更多样本表数据,同时指定预期结果。所有格式正确的文本(没有图像,没有链接。)

标签: sql


【解决方案1】:

这只是示例,您可以根据自己的需要进行锻炼。您可以按如下方式连接两个表。 :

SELECT `VT`.`distance`, `VT`.`status` 
FROM `vehiclesTable` AS `VT`
INNER JOIN driver_status_location AS `DSL` ON `DSL`.driver_id=`VT`.driver_id
WHERE 
  `VT`.`distance` <= 5 AND 
 `VT`.`status` = 0 AND 
 `VT`.`is_online` = true;

这是如何连接两个表的简单示例。它可能无法直接帮助您,但您可以将其用作从它开始的想法。

基本上为了加入两个表,你有 4 种方法可以这样做

  1. INNER JOIN - 检索两个表中具有匹配值的记录
  2. CROSS JOIN - 当左表或右表中存在匹配时检索所有记录
  3. LEFT JOIN - 从左表中检索所有记录,并从右表中检索匹配的记录。
  4. RIGHT JOIN - 从右表中检索所有记录,并从左表中检索匹配的记录。

此外,为了将两个或多个表连接在一起,最好的方法是使用 外键 列。 我也相信子查询会减慢查询速度。

我希望这些信息能以同样的方式帮助你,或者至少会给你一个方向。

【讨论】:

  • 请注意,这些反引号会导致大多数 dbms 出现语法错误。
  • FULL OUTER JOIN - 返回匹配的行,以及右表中没有匹配的左表中的行,以及左表中没有匹配的右表中的行。
  • 谢谢!让我试试这个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
相关资源
最近更新 更多