親愛的IT神人,小弟自學只會很基礎的SQL 語法,目前遇到以下難題
一筆資料訂單
另一筆是比對用表格,我希望能透過SQL 資料比對
透過比對表 來找出 訂單報表中最右邊那欄的結果
主要是各欄位都有些不規則
之前在Excel是用布林值比對一列一列往下比對所有項目都符合
目前轉移到SQL我是本來是使用Like+'%'的查找方式搭配Left Join
目前是用
From 訂單報表 left join 比對表
On ID包含 like %ID%
and ID排除 not like %ID%
但是ID 包含的"全"ID不知道該怎麼處理
謝謝
感覺你是想要下面這樣?
From 訂單報表 left join 比對表
On (ID包含 like %ID% or ID包含 = "全")
and ID排除 not like %ID%
如果可以給完整一點的SQL(like那段),可能會更看得懂一點
WITH RECURSIVE numbers AS (
SELECT 1 AS n
UNION ALL
SELECT n + 1
FROM numbers
WHERE n <= 10
)
SELECT
訂單報表.ID AS 訂單ID,
訂單報表.參數,
訂單報表.比對結果,
比對表.ID包含,
比對表.比對合併,
比對表.參數名稱
FROM
比對表
LEFT JOIN
訂單報表
ON
(
比對表.ID包含 = '全' OR
EXISTS (
SELECT 1
FROM (
SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(比對表.ID包含, ':', n), ':', -1)) AS single_id
FROM numbers
) AS split_ids
WHERE 訂單報表.ID LIKE CONCAT('%', split_ids.single_id, '%')
)
)
AND
(比對表.ID排除 IS NULL OR 訂單報表.ID NOT LIKE CONCAT('%', 比對表.ID排除, '%'));
你說的是這樣嗎?