我知道在 ClickHouse 中,我們必須使用相等運算子及其ON 條件。有什么建議可以解決我們必須使用 LIKE 運算子的情況,類似MySQL是怎么做的?
就像是:
SELECT *
FROM TABLE a
JOIN TABLE b ON b.column LIKE CONCAT('%', a.column ,'%')
只是為了測驗,我還嘗試使用類似于JOIN 檔案的第一個示例的第二個條件:
SELECT course_id, usage_key , display_name
FROM video_events LEFT JOIN video_info
ON video_events.course_id = video_info.course_key
AND startsWith(video_info.display_name, 'Choro');
但我收到錯誤:
Code: 403. DB::Exception: Received from localhost:9000. DB::Exception: Expected equality or inequality, got 'startsWith(display_name, 'Choro')': While processing startsWith(display_name, 'Choro').
即使我有一行上面的字串:
e19b1e00a6b6 :) select course_id, usage_key , display_name from video_events JOIN video_info on video_events.course_id = video_info.course_key;
┌─────course_id───────────────────────────┬─usage_key─────────────────────────────────────────────────────────────────────────────────┬─display_name───────────────┐
│ course-v1:Introduction CS001 2021autumn │ block-v1:Introduction CS001 2021autumn type@chapter block@379e3fbc409744d9bdaffa309dd6e20d │ Section 1 │
│ course-v1:Introduction CS001 2021autumn │ block-v1:Introduction CS001 2021autumn type@sequential block@e09c8c6e1ec746d1a31b634438f42071 │ Videos │
│ course-v1:Introduction CS001 2021autumn │ block-v1:Introduction CS001 2021autumn type@vertical block@ac5ab25121044b1da4e9658e2d876a4b │ Classical │
│ course-v1:Introduction CS001 2021autumn │ block-v1:Introduction CS001 2021autumn type@video block@ec9ba45b09e74ee98858ee40e28e31e9 │ Debussy │
│ course-v1:Introduction CS001 2021autumn │ block-v1:Introduction CS001 2021autumn type@vertical block@7799a7acf46d46e0a3b1b1298d6e542b │ Brasileira │
│ course-v1:Introduction CS001 2021autumn │ block-v1:Introduction CS001 2021autumn type@video block@7b91e95676eb472d8f528d701c5fe929 │ Choro │
│ course-v1:Introduction CS001 2021autumn │ block-v1:Introduction CS001 2021autumn type@sequential block@a1586de2d0ca4b31ae24cf3146e09c96 │ Forum │
└─────────────────────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────┘
我想在上面字串列過濾usage_key表中的video_info一個ID(例如7799a7acf46d46e0a3b1b1298d6e542b從)video_id表中的列video_events。
我也考慮過使用匹配來搜索字串,但我仍然無法弄清楚如何將它與 ON 條件一起使用。
uj5u.com熱心網友回復:
試試這個:
SELECT *
FROM (
SELECT course_id, usage_key , display_name
FROM video_events LEFT JOIN video_info
ON video_events.course_id = video_info.course_key
)
WHERE startsWith(display_name, 'Choro');
uj5u.com熱心網友回復:
我找到了一種方法來解決我想要的問題,方法是使用replaceRegexpOne函式過濾具有另一個表的 ID 的列,這樣我就可以在連接兩個表時使用相等性。
所以我得到了這樣的查詢:
SELECT course_id, user_id, replaceRegexpOne(usage_key, '.*(video\ block@)(.*)', '\\2') AS video_info_id, display_name
FROM video_info
INNER JOIN video_events
ON video_info_id = video_id ;
回傳包含 course_id、user_id、video_id 和 video_display_name 列的表:
course-v1:Introduction CS001 2021autumn 11 ec9ba45b09e74ee98858ee40e28e31e9 Debussy
course-v1:Introduction CS001 2021autumn 11 ec9ba45b09e74ee98858ee40e28e31e9 Debussy
course-v1:Introduction CS001 2021autumn 10 7b91e95676eb472d8f528d701c5fe929 Choro
course-v1:Introduction CS001 2021autumn 10 7b91e95676eb472d8f528d701c5fe929 Choro
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/315248.html
