我想看看我是否可以在我嘗試更新的 PostgreSQL 查詢方面獲得一些幫助:
SELECT games.*
FROM games
INNER JOIN games_players
ON games.id = games_players.game_id
WHERE games.status = 'closed'
AND games_players.player_id = $1
AND games.away ~* '/. ?(?=-)/' <--- attempt at REGEX pattern match
ORDER BY scheduled DESC
LIMIT 5
我需要編輯此查詢以僅回傳具有現有條件的最后 5 行,但我也只想回傳該“游戲”表中在離開列中包含相同課程名稱的行。這些列字串如下所示:“TPC Four Seasons - RD 1”。我嘗試在上面使用 REGEX 執行此操作,但它似乎不起作用并回傳 0 行。我想回傳按計劃列按降序排序的最后 5 行,并且還限制為在字串中的“-”之前具有匹配子字串的離開列的正則運算式。這可能嗎?有人可以幫忙嗎?
更新:
額外的查詢嘗試:
SELECT games.*
FROM games
INNER JOIN games_players ON games.id = games_players.game_id
WHERE SUBSTRING(games.away, 0, STRPOS('-', games.away)) IN
(
SELECT SUBSTRING(games.away, 0, STRPOS('-', games.away)) FROM games
GROUP BY SUBSTRING(games.away, 0, STRPOS('-', games.away))
HAVING COUNT(*) > 1
)
AND games.status = 'closed' AND games_players.player_id = $1
ORDER BY scheduled DESC LIMIT 5
更新最終答案:
我一直在玩邏輯并進行內部選擇以深入了解我需要的資訊,并最終從該查詢中獲得以下正確結果:
select games.*
FROM games
INNER JOIN games_players ON games.id = games_players.game_id
WHERE games.status = 'closed' AND
games_players.player_id = $1 and
games.away LIKE concat(regexp_replace((select games.away FROM games ORDER BY scheduled DESC LIMIT 1 ), '-.*', ''), '%')
ORDER BY scheduled desc
limit 5
uj5u.com熱心網友回復:
在洗掉破折號后的所有內容后,將要求重新表述為兩列相同,最簡單的方法是
regexp_replace(games.away, '-.*', '')
它與破折號匹配,后面的所有內容都沒有(有效地洗掉它)
將其放入查詢中:
SELECT distinct games.*
FROM games
JOIN games g2 on regexp_replace(games.away, '-.*', '') = regexp_replace(g2.away, '-.*', '')
AND g2.id != games.id
JOIN games_players ON games.id = games_players.game_id
WHERE games.status = 'closed'
AND games_players.player_id = $1
ORDER BY scheduled DESC
LIMIT 5
順便說一句,您的正則運算式中的那些斜杠字符與字符匹配/,這不是您想要的。一些語言(例如 JavaScript)使用斜線來分隔正則運算式,但斜線在正則運算式中沒有特殊含義。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/443532.html
標籤:正则表达式 数据库 PostgreSQL
上一篇:我需要創建3種型別的用戶
