Я ищу способ поместить CONCAT_WS('',upper(WT.TitleA),upper(WT.CondB),upper(WT.TitleF),upper(WT.PublisherA),upper(WT.SeriesA))
в одну переменную, чтобы его не нужно было печатать сотни раз для поиска SQL с сотнями OR LIKE
деталей.
SELECT
WT.Sku AS Sku
, WS.View AS View
, WT.TitleA AS TitleA
, WT.Index AS Index
, WT.CondB AS CondB
, WT.TitleF AS TitleF
, WT.PublisherA AS PublisherA
, WT.SeriesA AS SeriesA
FROM
wt_table_one AS WT
INNER JOIN public.ws_table_one AS WS ON WT.Index = WS.Index
WHERE
WS.View = 17
AND (
CONCAT_WS('',upper(WT.TitleA),upper(WT.CondB),upper(WT.TitleF),upper(WT.PublisherA),upper(WT.SeriesA)) LIKE '%PANTHER%'
OR CONCAT_WS('',upper(WT.TitleA),upper(WT.CondB),upper(WT.TitleF),upper(WT.PublisherA),upper(WT.SeriesA)) LIKE '%WISHING%'
OR (CONCAT_WS('',upper(WT.TitleA),upper(WT.CondB),upper(WT.TitleF),upper(WT.PublisherA),upper(WT.SeriesA)) LIKE '%MIGHTY%' AND CONCAT_WS('',upper(WT.TitleA),upper(WT.CondB),upper(WT.TitleF),upper(WT.PublisherA),upper(WT.SeriesA)) LIKE '%THOR%')
OR (CONCAT_WS('',upper(WT.TitleA),upper(WT.CondB),upper(WT.TitleF),upper(WT.PublisherA),upper(WT.SeriesA)) LIKE '%ANIMAL%' AND CONCAT_WS('',upper(WT.TitleA),upper(WT.CondB),upper(WT.TitleF),upper(WT.PublisherA),upper(WT.SeriesA)) LIKE '%CROSSING%')
OR (CONCAT_WS('',upper(WT.TitleA),upper(WT.CondB),upper(WT.TitleF),upper(WT.PublisherA),upper(WT.SeriesA)) LIKE '%BRIAN%' AND CONCAT_WS('',upper(WT.TitleA),upper(WT.CondB),upper(WT.TitleF),upper(WT.PublisherA),upper(WT.SeriesA)) LIKE '%BLESSED%')
OR (CONCAT_WS('',upper(WT.TitleA),upper(WT.CondB),upper(WT.TitleF),upper(WT.PublisherA),upper(WT.SeriesA)) LIKE '%ONE%' AND CONCAT_WS('',upper(WT.TitleA),upper(WT.CondB),upper(WT.TitleF),upper(WT.PublisherA),upper(WT.SeriesA)) LIKE '%OF%' AND CONCAT_WS('',upper(WT.TitleA),upper(WT.CondB),upper(WT.TitleF),upper(WT.PublisherA),upper(WT.SeriesA)) LIKE '%A%' AND CONCAT_WS('',upper(WT.TitleA),upper(WT.CondB),upper(WT.TitleF),upper(WT.PublisherA),upper(WT.SeriesA)) LIKE '%KIND%')
)
LIMIT 10000
(Есть еще около ста или около того LIKE
условий, но я сократил их здесь)
Я новичок в SQL, так что терпите меня, но я пытался следующее.
SELECT
@concvar :=CONCAT_WS('',upper(WT.TitleA),upper(WT.CondB),upper(WT.TitleF),upper(WT.PublisherA),upper(WT.SeriesA))
,WT.Sku AS Sku
...
SET @concvar =CONCAT_WS('',upper(WT.TitleA),upper(WT.CondB),upper(WT.TitleF),upper(WT.PublisherA),upper(WT.SeriesA))
SELECT
WT.Sku AS Sku
...
из https://www.oreilly.com/library/view/mysql-cookbook/0596001452/ch01s15.html
Все по-прежнему работает нормально, как есть, но я бы предпочел только одно место обновить это, а не несколько сотен.
-Edit- Моя цель будет примерно такой:
CONCATVAR = CONCAT_WS('',upper(WT.TitleA),upper(WT.CondB),upper(WT.TitleF),upper(WT.PublisherA),upper(WT.SeriesA))
SELECT
WT.Sku AS Sku
, WS.View AS View
, WT.TitleA AS TitleA
, WT.Index AS Index
, WT.CondB AS CondB
, WT.TitleF AS TitleF
, WT.PublisherA AS PublisherA
, WT.SeriesA AS SeriesA
FROM
wt_table_one AS WT
INNER JOIN public.ws_table_one AS WS ON WT.Index = WS.Index
WHERE
WS.View = 17
AND (
CONCATVAR LIKE '%PANTHER%'
OR CONCATVAR LIKE '%WISHING%'
OR (CONCATVAR LIKE '%MIGHTY%' AND CONCATVAR LIKE '%THOR%')
OR (CONCATVAR LIKE '%ANIMAL%' AND CONCATVAR LIKE '%CROSSING%')
OR (CONCATVAR LIKE '%BRIAN%' AND CONCATVAR LIKE '%BLESSED%')
OR (CONCATVAR LIKE '%ONE%' AND CONCATVAR LIKE '%OF%' AND CONCATVAR LIKE '%A%' AND CONCATVAR LIKE '%KIND%')
)
LIMIT 10000