mysql - 是否可以在 SQL 中 LEFT JOIN @variable 表

标签 mysql sql inner-join

总结

我正在尝试在 SQL 中的过滤 TABLE 上进行 LEFT JOIN。

为此,我首先在 @ 变量中声明一个临时表,然后尝试加入它。

不幸的是,我做这件事时运气不佳,当限制为这样的结果集时,它大大加快了我的查询速度。

其他路线尝试

我最初试图在 WHERE 上执行此操作,但是这阻止了在没有匹配的 events 的情况下发生行(我正在计算事件 by intervals_days 所以我需要返回,不管另一个是否匹配)。

在我意识到自己的错误后,我转到了ON。我还没有看到这样做的例子,我有一种感觉,在此处对 SELECT 执行 FIND_IN_SET 性能不佳?

查询

初始过滤器

DECLARE @filtered_events TABLE (id INT, eventable_id INT, eventable_type VARCHAR(255), occurred_at TIMESTAMP, finished_at TIMESTAMP)
INSERT INTO @filtered_events
SELECT
    e.id, e.eventable_id, e.eventable_type, e.occurred_at, e.finished_at
FROM
    units_events as ue
LEFT JOIN
    events as e
ON
    e.id = ue.event_id
WHERE
    ue.unit_id
IN
    (1,2,3);

忽略这里的(1,2,3),这些值是动态添加到查询中的。

我尝试使用它

SELECT
    i.starts_at as starts_at,
    i.ends_at as ends_at,
    count(fe.id) as count
FROM
    intervals_days as i
LEFT JOIN
    @filtered_events as fe
ON
    ( fe.occurred_at >= starts_at AND fe.occurred_at < ends_at )
WHERE
    ( starts_at >= '15-01-2019' AND ends_at < NOW() )
GROUP BY
    starts_at
ORDER BY
    starts_at
DESC;

这些查询在一个 SQL 文档中,一个在另一个之上,每个查询都有终止的 ; 分号。

我希望这会输出我的较低查询输出(按 intervals_days 行分组的结果集)- 但是,我的 LEFT JOIN 查询的好处是在一个小得多的样本上进行。

最佳答案

抱歉,没有这样的语法。

MySQL 也没有数组的概念。

也不能在存储例程之外使用 DECLARE

关于mysql - 是否可以在 SQL 中 LEFT JOIN @variable 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57664481/

相关文章:

mysql - 显示列名 MySQL

sql - 当没有行匹配时从左表中选择最后一条记录

php - MySQL/PDO - 从其他表中选择(Join 语句)

mysql - 编写此查询的最佳方式?

python - Django 内部连接查询集

python - 如何将字节插入 Python 字符串

php - 使用 PHP 从 MySQL 表中选择过期记录

Python 向外键属性插入值(MYSQL)

sql - 从 MIN 日期获取 MAX 日期时间值

sql - 如何在 Access 中使用子查询执行更新查询?