簡體   English   中英

是否可以在SQL中左聯接@variable表

[英]Is it possible to LEFT JOIN a @variable table in SQL

摘要

我正在嘗試在SQL中經過過濾的表上左聯接。

為此,我首先在@變量中聲明一個臨時表,然后稍后嘗試對其進行聯接。

不幸的是,我這樣做並沒有多大運氣,當限於這樣的結果集時,它極大地加快了我的查詢速度。

嘗試過的其他路線

我最初試圖在WHERE上進行此操作,但是這可以防止在沒有匹配events發生行(我 intervals_days對事件進行計數,因此無論是否有匹配項,我都需要返回。)

在意識到自己的錯誤之后,我轉到了ON 我還沒有看到完成此操作的示例,並且我有感覺在SELECT上執行FIND_IN_SET不會很有效?

QUERIES

初始過濾器

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文檔中,一個位於另一個SQL文檔中,且以終止; 每個分號。

我希望這能輸出我較低查詢的輸出(按intervals_days行分組的結果集),但是受益於在較小的樣本上進行的LEFT JOIN查詢。

抱歉,沒有這樣的語法。

MySQL也沒有數組的概念。

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

正如Shadow在評論中所說的那樣,對於MySQL,我將使用這樣的子查詢:

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
(
    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)
) 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM